• yii2-basic后台管理功能开发之五:用户权限的控制


    需求:后台有两种权限+管理员+用户

    区别:可以访问的页面不同

    解决方法:用户表添加role字段,使用到的是yii2 存取控制过滤器(ACF)方法.

    >1在web.php中配置授权的类,有两种,我用到的是PhpManager

    'components' => [
        'authManager' => [
                'class' => 'yii
    bacPhpManager',
            ],
    
        ],

    >2在用户表中配置角色权限对应的role值,也可以不配置

     const ROLE_ADMIN = 0;
     const ROLE_USER = 1;

    >3重写授权规则类AccessRule

    class AccessRule extends yiifiltersAccessRule
    {
        /**
         * @inheritdoc
         */
        protected function matchRole($user)
        {
            if (count($this->roles) === 0) {
                return true;
            }
            foreach ($this->roles as $role) {
                if ($role === '?') {
                    if ($user->getIsGuest()) {
                        return true;
                    }
                }elseif (!$user->getIsGuest() && $role == $user->identity->role) {
                    return true;
                }
            }
            return false;
        }
    
    }

    >4在控制器中配置相应的权限.

    注意其中的ruleConfig是我们刚才改写的类,如果需要控指定的action,则在rules对[action]进行配置.

     public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'ruleConfig' => [
                        'class' => AccessRule::className(),
                    ],
                    'rules' => [
                        [
                            'allow' => true,
                            'roles' => [
                                User::ROLE_ADMIN,
                            ],
                        ],
                    ],
                ],
            ];
        }
  • 相关阅读:
    不相交集合ADT
    Python基于比较的排序
    优先队列(堆)
    Python数据结构——散列表
    设计包含min函数的栈
    What really happens when you navigate to a URL
    browser process request
    Business vs Technology
    理解端口与IP
    Tor的教程
  • 原文地址:https://www.cnblogs.com/perallina/p/5920335.html
Copyright © 2020-2023  润新知