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

时间:2015-10-14 09:53:02

标签: yii2 yii2-advanced-app

以下情景:

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

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

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

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

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

发生

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

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

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

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

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

1 个答案:

答案 0 :(得分: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 );
    } 
}

在UserPermissionManager类中,它查询一个充满权限的数据库表,例如&#34; users:access&#34;,&#34; users:edit&#34;等

它们都分配了一定的用户级别,这与我在Users数据库表中设置的用户级别有关。

所有can()函数需要做的是返回true或false,具体取决于该用户是否有权执行它所要求的操作。你可以按照自己喜欢的方式处理这个问题。

这是一个非常庞大的系统,可以在一篇文章中完全解释,但我希望它有点帮助,如果我能更好地解释一下,请随时告诉我!