我正在为 Yii 建立一个动态 RBAC 系统,但我不知道如何处理这个问题:
版主可以改变用户的角色,此外,用户也可以通过获得不同的资格来改变它(比如说成就,所以她/他可以做更多的事情,这可以双向发生)。
当他/她登录时,当角色向后更改(权限较少的角色)或转发(权限较多的角色)时会发生什么?不能访问他刚刚有权使用的功能?或者在注销/重新登录操作之前仍然可以访问这些功能?
提前感谢您的帮助。
我正在为 Yii 建立一个动态 RBAC 系统,但我不知道如何处理这个问题:
版主可以改变用户的角色,此外,用户也可以通过获得不同的资格来改变它(比如说成就,所以她/他可以做更多的事情,这可以双向发生)。
当他/她登录时,当角色向后更改(权限较少的角色)或转发(权限较多的角色)时会发生什么?不能访问他刚刚有权使用的功能?或者在注销/重新登录操作之前仍然可以访问这些功能?
提前感谢您的帮助。
更改授权分配的效果将是即时的。
IWebUser::checkAccess()
只有在同一请求中发出的连续调用才能返回缓存值,因为IWebUser
ie的默认实现CWebUser
使用静态属性来缓存计算的权限。
为了阐明该过程,您将调用IAuthManager::revoke()
旧权限和IAuthManager::assign()
新权限。
有时你通过IWebUser::setState()
方法存储会话信息;如果当前登录用户的状态会随着权限而改变,例如您存储当前用户的角色名称,您必须考虑到这一点并调用IWebUser::clearState()
或IWebUser::logout()
后跟IWebUser::login()
- 后者也会在CWebUser
实现中清除缓存的权限。
CWebUser::_access
已声明private
,因此如果要覆盖默认实现,则必须声明一个新属性。