【问题标题】:Yii RBAC, Role change in runtimeYii RBAC,运行时角色变化
【发布时间】:2013-03-30 10:22:49
【问题描述】:

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

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: yii user-management rbac


    【解决方案1】:

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

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

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

    编辑

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

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

    【讨论】:

    • 因此您需要覆盖 CWebUser 设置以允许您重置缓存的权限
    • 这个“缓存”是每个请求的。在下一次请求(页面加载)时,缓存是从头开始构建的
    猜你喜欢
    • 2016-03-25
    • 2015-11-12
    • 2018-06-08
    • 1970-01-01
    • 2014-12-26
    • 2015-02-16
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多