我正在为Yii构建一个动态RBAC系统,我不知道如何处理这个问题:
主持人可以改变用户的角色,而且用户也可以通过获得不同的资格来改变它(让我们说成就,所以他/她可以做更多的事情,它可以双向发生)。
当他/她登录时,角色更改为Backwards(角色较少的角色)或Forwards(角色更右侧)会发生什么?无法访问他刚才有权使用的功能?或者仍然可以访问函数,直到注销/重新启动操作?
提前感谢您的帮助。
答案 0 :(得分:1)
更改授权分配的效果将是中级。
只有在同一请求中发出的对IWebUser::checkAccess()
的连续调用可能会返回缓存值,因为IWebUser
的默认实现,即CWebUser
,使用了static属性用于缓存计算的权限。
为澄清此过程,您将在旧权限上调用IAuthManager::revoke()
,在新权限上调用IAuthManager::assign()
。
有时您通过IWebUser::setState()
方法存储会话信息;如果当前登录用户的状态应随权限而改变,例如如果您存储了当前用户的角色名称,则必须考虑到这一点,然后拨打IWebUser::clearState()
或IWebUser::logout()
,然后调用IWebUser::login()
- 后者也会清除CWebUser
中的缓存权限实施
CWebUser::_access
被声明为 private
,因此如果要覆盖默认实现,则必须声明新属性。