Yii RBAC,运行时角色更改

Yii RBAC,运行时角色更改,yii,user-management,rbac,Yii,User Management,Rbac,我正在为Yii建立一个动态RBAC系统,我不知道如何处理这个问题: 版主可以改变用户的角色,而且用户也可以通过获得不同的资格来改变角色(比如说成就,这样他/她可以做更多的事情,并且可以双向实现) 当角色登录时向后(权限较低的角色)或向前(权限较高的角色)更改角色时,会发生什么情况?无法访问他刚刚获得使用权的功能?或者在注销/重新登录操作之前仍然可以访问功能 提前感谢您的帮助。更改授权分配的效果将是中间的 只有在同一请求中发出的对IWebUser::checkAccess()的连续调用才能返回缓存

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

版主可以改变用户的角色,而且用户也可以通过获得不同的资格来改变角色(比如说成就,这样他/她可以做更多的事情,并且可以双向实现)

当角色登录时向后(权限较低的角色)或向前(权限较高的角色)更改角色时,会发生什么情况?无法访问他刚刚获得使用权的功能?或者在注销/重新登录操作之前仍然可以访问功能


提前感谢您的帮助。

更改授权分配的效果将是中间的

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

为了澄清过程,您将对旧权限调用
IAuthManager::revoke()
,对新权限调用
IAuthManager::assign()

编辑 有时通过
IWebUser::setState()
方法存储会话信息;如果当前登录用户的状态将随权限的变化而变化,例如存储当前用户的角色名,则必须考虑到这一点,然后调用
IWebUser::clearState()
IWebUser::logout()
,然后调用
IWebUser::login()
–后者还清除
CWebUser
实现中的缓存权限


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

因此,您需要覆盖CWebUser设置,以允许您重置缓存权限此“缓存”是针对每个请求的。在下一个请求(页面加载)中,缓存从头开始构建