使用内置的rbac还是自己构建?

Sar*_*est 6 yii2 yii2-advanced-app

以下场景:

我在Yii2的高级模板中有一个多租户Web应用程序.

此应用程序有三个门户:
- 后端
- 仪表板
- 前端

每个门户都有自己的用户表进行身份验证.
(-frontend_user,
-dashboard_user,
-backend_user)

前端和仪表板最终可以与租户的名称联系,例如:

当用户尝试登录仪表板或前端时,我必须检查他们是否有权登录.这通过列联表发生(例如:dashboard_user_tenant)

现在我想为仪表板应用程序构建一个rbac.

但是角色不应该挂在仪表板用户身上,而应该挂在dashboard_user_tenant(列联表)上,因为权限可以在每个租户的仪表板中更改.

Yii2有自己的rbac系统,但据我所知,到目前为止,它并不符合我的需要.

有没有机会定制Yii2的rbac或者更好地构建我自己的自定义解决方案?也许是我自己的组件?

我希望我的描述足够清楚:)

小智 3

我在一个项目中也有类似的愿望,但我没有创建自己的完整 RBAC 系统,而是重写了一种检查角色的方法

在我的 User 组件类中,我扩展了 \yii\web\User,并覆盖了该类的 can() 函数。这让我可以使用自己的方式来检查适当的权限。例如

<?php

namespace app\modules\users\models;

use Yii;
use yii\web\User as WebUser;

use app\modules\users\models\UserPermissionManager;

class User extends WebUser
{
    public function can( $operation, $params = [], $allowCaching = true ) 
    {
        if(Yii::$app->user->isGuest)
        {
            return false;
        }

        return ( new UserPermissionManager() )->has( $operation );
    } 
}
Run Code Online (Sandbox Code Playgroud)

在UserPermissionManager类中,它查询一个充满“users:access”、“users:edit”等权限的数据库表

他们都分配有特定的用户级别,这与我在用户数据库表中设置的用户级别相关。

can() 函数所需要做的就是返回 true 或 false,具体取决于该用户是否有权执行所要求的操作。您可以随心所欲地处理这个问题。

这是一个相当大的系统,无法在一篇文章中完整解释,但我希望它能稍微有所帮助,如果我可以更好地解释任何内容,请随时告诉我!