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

Use built-in rbac or build own?

以下场景:

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

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

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

可以在末尾使用租户名称访问前端和仪表板,例如:

当用户尝试登录仪表板或前端时,我必须检查他们是否有权登录。 这是通过 偶然事件 table 发生的(例如:dashboard_user_tenant)

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

但角色不应挂在仪表板用户处,而应挂在 dashboard_user_tenant(偶然事件 table), 因为权利可以在每个租户的仪表板中更改。

Yii2 有自己的 rbac 系统,但据我目前的了解,它不符合我的需求。

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

希望我的描述够清楚:)

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

在我的用户组件 class 中,我扩展了 \yii\web\User,并且还覆盖了那个 class 的 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 );
    } 
}

在 UserPermissionManager class 中,它查询一个数据库 table,该数据库 table 充满了诸如 "users:access"、"users:edit" 等权限

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

can() 函数需要做的只是 return true 或 false,具体取决于此用户是否有权执行所要求的操作。你可以随心所欲地处理这个。

这是一个相当大的系统,无法在一个文件中完整解释 post,但我希望它能对您有所帮助,如果我能解释得更好,请随时告诉我!