博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Yii 后台权限管理分享
阅读量:6551 次
发布时间:2019-06-24

本文共 5188 字,大约阅读时间需要 17 分钟。

hot3.png

最近在用Yii开发B2C商城,今天把其中的权限管理发布与大家一起学习。

第一步:配置权限,我这边是写在配置文件里的。

//权限配制数据    public static $aclList = array(        'order'=>array(            'name'=>'订单',            'ctl'=>array(                array(                    'name'=>'订单列表',                    'list_ctl'=>array('default'),                    'act'=>array(                        'default'=>array(                            'name'=>'订单',                            'default_id'=>'index',                            'list_act'=>array('index'=>'订单列表','update'=>'订单编辑','delete'=>'删除订单')                        ),                    )                )            )        ),        'goods'=>array(            'name'=>'商品',            'ctl'=>array(                array(                    'name'=>'商品管理',                    'list_ctl'=>array('default'),                    'act'=>array(                        'default'=>array(                            'name'=>'商品列表',                            'default_id'=>'index',                            'list_act'=>array('index'=>'商品列表')                        ),                    )                ),                array(                    'name'=>'商品配置',                    'list_ctl'=>array('cat'),                    'act'=>array(                        'cat'=>array(                            'name'=>'商品分类',                            'default_id'=>'index',                            'list_act'=>array('index'=>'分类列表')                        ),                    ),                ),            )        ),        'desktop'=>array(            'name'=>'系统',            'ctl'=>array(                array(                    'name'=>'管理员和权限',                    'list_ctl'=>array('role','user'),                    'act'=>array(                        'role'=>array(                            'name'=>'角色管理',                            'default_id'=>'index',                            'list_act'=>array('index'=>'角色列表','update'=>'角色编辑')                        ),                        'user'=>array(                            'name'=>'操作员管理',                            'default_id'=>'index',                            'list_act'=>array('index'=>'操作员列表')                        ),                    )                )            )        ),    );

第二步:建立权限与角色关系

CREATE TABLE `NewTable` (`role_id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '角色ID' ,`group_name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '组名称' ,`acl`  text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限' ,`status_is`  enum('Y','N') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'Y' COMMENT '状态' ,`create_time`  int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '录入时间' ,PRIMARY KEY (`role_id`))ENGINE=InnoDBDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciCOMMENT='管理员组'AUTO_INCREMENT=4ROW_FORMAT=COMPACT;

alc值为:moduleID_controllerID_actionID,moduleID_controllerID_actionID......组成的字符串。

第四步:管理员与角色绑定

简单点在管理员表里添加一个字段用来存放角色ID,管理员登录后台就能通过角色ID获取角色。

第五步:后台菜单过滤

通过获取到的角色进行后台菜单过滤。

/**     * 后台菜单过滤     *     */    static public function filterMenu($acl_list,$super)    {        $item = self::$aclList;        if ($super == 1) return $item;        foreach ($item as $k=>$v) {            foreach ($v['ctl'] as $kk=>$vv) {                foreach ($vv['act'] as $kkk=>$vvv) {                    $acl = $k.'_'.$kkk.'_'.$vvv['default_id'];                    if (!in_array($acl,$acl_list)) {                        unset($item[$k]['ctl'][$kk]['act'][$kkk]);                    }                }                if (empty($item[$k]['ctl'][$kk]['act'])) unset($item[$k]['ctl'][$kk]);            }            if (empty($item[$k]['ctl'])) unset($item[$k]);        }        return $item;    }

 这边是通过

第六步:这些权限如何在后台页面显示出来

ActList as $k=>$v):?>                
module==$k&&$_GET['r']!='desktop/default/index'?'open':'';?>">                    
                        
                        
                        
                                        
module==$k&&$_GET['r']!='desktop/default/index'?'style="display: block;"':'';?>>                        
                        
module==$k&&in_array(Yii::app()->controller->id,$vv['list_ctl'])?'open':'';?>">                            
                                
                                
                                
                                                        
module==$k&&in_array(Yii::app()->controller->id,$vv['list_ctl'])&&$_GET['r']!='desktop/default/index'?'block':'none';?>;">                                
$vvv):?>                                
module==$k&&Yii::app()->controller->id==$kkk?'active':'';?>">                                    
/
/
">                                        
                                        
                                                                                                    
                                                                            
                                                    

看起来是是循环多了点,主要是前面配置权限参数时候循环多了。

第七步:单个权限验证。

虽然在左侧菜单已经将不属于管理员的权限显示,但防止有漏网之鱼,需要在基类里添加验证功能。

/**     * 权限验证     *     * @param $acl     * @param $super     */    public function Pemission($acl,$super)    {        if ($super == 1) return;        $r = $_GET['r'];        $permission = str_replace('/','_',$r);        $except = array(            'desktop/default/index',            'desktop/default/permission'        );        if (!in_array($r,$except) && !in_array($permission,$acl)) {            $this->redirect('?r=desktop/default/permission&redirect='.Yii::app()->request->urlReferrer);        }    }

第八步:在页面里单个小功能。

我们也通过具体的route进行判断。

至此,我完成了Yii开发的系统后台的权限管理,可以根据route进行管理,精确到action。

 以上的功能来源

转载于:https://my.oschina.net/chen08054/blog/366655

你可能感兴趣的文章
tengine+tomcat+php安装
查看>>
第 45 章 HyperDex
查看>>
会议室预定系统实践(轻松解放开发) - PostgreSQL tsrange(时间范围类型) + 排他约束...
查看>>
Centos6安装SaltStack
查看>>
世纪互联发布全新云战略,打造混合IT服务平台
查看>>
Linux运维常用命令
查看>>
关于在angular2及以上版本引入bootstrap 并有提示功能
查看>>
十三、rsync+inotify的使用
查看>>
挨踢部落故事汇(16):技术人疲倦期的最佳实践
查看>>
浅说RAID和LVM
查看>>
VMware Horzion view 7测试需要注意的一些 地方
查看>>
笔记本windows 7下WIFI共享设置
查看>>
《spring 4.x 企业应用开发实战》FAQ及勘误表
查看>>
python查找替换(一)
查看>>
salt stack 安装搭建
查看>>
linux中文乱码问题解决办法
查看>>
Linux中用CVSNT进行目录、文件的权限设置
查看>>
PHP的method_exists,function_exists,is_callable的区别
查看>>
服务器安全检查指引——日常维护说明
查看>>
Elasticsearch中文分词ik使用
查看>>