0

我正在为 Yii 建立一个动态 RBAC 系统,但我不知道如何处理这个问题:

版主可以改变用户的角色,此外,用户也可以通过获得不同的资格来改变它(比如说成就,所以她/他可以做更多的事情,这可以双向发生)。

当他/她登录时,当角色向后更改(权限较少的角色)或转发(权限较多的角色)时会发生什么?不能访问他刚刚有权使用的功能?或者在注销/重新登录操作之前仍然可以访问这些功能?

提前感谢您的帮助。

4

1 回答 1

1

更改授权分配的效果将是即时的。

IWebUser::checkAccess() 只有在同一请求中发出的连续调用才能返回缓存值,因为IWebUserie的默认实现CWebUser使用静态属性来缓存计算的权限。

为了阐明该过程,您将调用IAuthManager::revoke()旧权限和IAuthManager::assign()新权限。

编辑

有时你通过IWebUser::setState()方法存储会话信息;如果当前登录用户的状态会随着权限而改变,例如您存储当前用户的角色名称,您必须考虑到这一点并调用IWebUser::clearState()IWebUser::logout()后跟IWebUser::login()- 后者也会在CWebUser实现中清除缓存的权限。

CWebUser::_access已声明private,因此如果要覆盖默认实现,则必须声明一个新属性。

于 2013-03-30T11:24:00.587 回答