yii2权限管理

1 篇文章 0 订阅
1 篇文章 0 订阅

ACF:存取控制过滤器
存取控制过滤器(ACF)是一种通过 yii\filters\AccessControl 类来实现的简单授权方法。
介绍其使用:

    public function behaviors()
    {
        return [
            'access' => [
                'class' => yii\filters\AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['create', 'update', 'view', 'delete'],
                            'roles' => ['@'],
                        ],
                        [
                            'allow' => true,
                            'actions' => ['index'],
                            'roles' => ['?'],
                        ],
                    ],
            ],
        ];
    }
  1. rules:array a list of access rule objects or configuration arrays for creating the rule objects.
    • If a rule is specified via a configuration array, it will be merged with [[ruleConfig]] first
    • before it is used for creating the rule object.
  2. 允许所有访客(还未经认证的用户)执行 index 操作。 roles 选项包含的问号 ? 是一个特殊的标识,代表”访客用户”。
    允许已认证用户执行 create update view delete操作。@是另一个特殊标识, 代表”已认证用户”。

基于角色的存取控制 (RBAC)
只简单介绍使用数据库存放授权数据
在配置文件web.php中添加component配置:

'components' => [
    ......
    'authManager' => [   
                 'class' => 'yii\rbac\DbManager',    
                 'itemTable' => 'auth_item',    
                 'assignmentTable' => 'auth_assignment',    
                 'itemChildTable' => 'auth_item_child',
            ],
]

DbManager 使用4个数据库表存放它的数据:

  • yii\rbac\DbManager::$itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 “auth_item” 。
  • yii\rbac\DbManager::$itemChildTable: 该表存放授权条目的层次关系。默认表名为 “auth_item_child”。
  • yii\rbac\DbManager::$assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 “auth_assignment”。
  • yii\rbac\DbManager::$ruleTable: 该表存放规则。默认表名为 “auth_rule”。

    你需要在数据库中创建这些表。你可以使用存放在 @yii/rbac/migrations 目录中的数据库迁移文件来做这件事。
    授权步骤如下:

  • 定义角色和权限

  • 建立角色和权限的关系
  • 定义规则
  • 将规则与角色和权限作关联
  • 指派角色给用户

    具体实现如下代码:

public function actionAccess()
    {
        $auth = Yii::$app->authManager;
        //创建agent权限
        $agentPermission = $auth->createPermission('agent');
        $agentPermission->description = 'create agent operate permission.';
        $auth->add($agentPermission);  
        //创建admin角色
        $adminRole = $auth->createRole('admin');    
        $adminRole->description = 'create admin role.';    
        $auth->add($adminRole);
        //将权限赋予角色
        $auth->addChild($adminRole, $agentPermission);
        //将角色赋予用户
        $userId = 1;
        $auth->assign($adminRole, $userId);
    }

授权结束后就可以进行控制器请求执行前的权限判断了。如下:

    public function beforeAction($action)
    {
        if (!parent::beforeAction($action)) {
            return false;
        }

        if (Yii::$app->user->can(Yii::$app->controller->id)) {
            return true;
        }

        throw new \yii\web\UnauthorizedHttpException('无权查看');
    }
Yii::$app->user->can($permissionName)
传入权限的名称,yii会自动去判断当前用户是否具有这种权限,返回truefalse。
如果为true就可以继续执行请求的方法了。
如果为false,我们可以做一些拦截,比如直接抛出异常。

参考:Yii2.0授权指南
http://www.yiichina.com/doc/guide/2.0/security-authorization

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值