在Yii2中为每个模块设置用户权限

时间:2017-01-07 14:56:59

标签: yii2

我想在每个模块上设置用户权限。 每个模块都有自己的权限表。最推荐的方法是什么?

原因:我的应用程序只为少数客户提供了一些可选模块。

更新 类似的东西:

表:mod_inventory_permission

id int
User_id int
Read_permission boolean
Write_permission boolean
Admin_permission boolean

2 个答案:

答案 0 :(得分:1)

您可以使用RBAC!您可以在其中设置不同的模块,并为每个模块设置不同的权限。

答案 1 :(得分:0)

是的,您可以通过使用Rbac来实现这一点,这可以帮助您将同一应用程序中的用户限制为有限的模块,控制器或操作 您必须按照以下步骤操作,我希望它能为您提供帮助 我建议你使用yii2为rbac提供的auth_表 第1步:导入所有身份验证表
第2步:在类型为1的auth_item表中创建不同的角色,并且type = 2的所有权限 注意 请确保您以某种特定模式输入您的权限,我正在使用模块/控制器/操作, 由你来决定如何实施它。
第3步:创建通用控制器并从此通用控制器扩展所有控制器, 在通用控制器中,您必须检查用户是否允许访问他/她不想访问的模块,控制器或操作。

public function beforeAction($action) {
        $module = Yii::$app->controller->module->id;
        $controller = ucfirst(Yii::$app->controller->id);
        $action = Yii::$app->controller->action->id;
        if (Yii::$app->user->can($module)) {

            if (Yii::$app->user->can($module . '/' . $controller)) {
                return true;
            } 
            if (Yii::$app->user->can($module . '/' . $controller . '/' . $action)) {
                return true;
            } 
else {
                throw new \yii\web\HttpException(403, 'You are not allowed to view this page');
            }
        } else {
            throw new \yii\web\HttpException(403, 'You are not allowed to view this page');
        }
    }

beforeAction功能实现3层认证,您可以根据自己的要求进行更改.... 我希望它能帮助你