时间:2021-05-18
说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等。最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门老大下面分子部门等等,恶心的需求。我们这个项目使用yii框架开发,yii在php届还是比较流行的,虽然说laravel现在横行,但是一些部门一些团队还是采用了yii框架,比如我们。
我是刚接触yii这个框架,开始的时候对这种面向组件的框架甚是别扭。当时打算自己写权限的,自己创建权限表,关联表等,但是学习使用yii开发文档后,发现有个权限控制RBAC,借助于yii-admin可以实现完美的权限,菜单的控制。这篇博客分两部门,第一部分我会讲述怎么搭建权限管理包括:安装yii-admin,创建权限表,使用权限控制菜单和访问权限等基本的操作,这部分大致说一下,想要看更详细的步骤可以参考这个比较详细的讲解:http://mand($sql)->bindValue(":user_id", $user)->queryAll();if (empty($permission)) {return false;}//组合权限列表foreach ($permission as $key => $value) {if (!empty($value['child']) && !in_array($value['child'], $permission_list)) {$permission_list[] = $value['child'];}if (!empty($value['role_name']) && !in_array($value['role_name'], $permission_list)) {$permission_list[] = $value['role_name'];}}//匿名方法,处理子url生成$getUrlList = function($url) {if (!strstr($url, '/')) {return [$url];}$url = '/' . trim($url, '/');$params = explode('/', $url);$param_arr = [];$param_str = [];if (!empty($params) && is_array($params)) {foreach ($params as $key => $value) {if (!empty($value)) {$param_arr[] = $value;}}}if (!empty($param_arr)) {$tmp_str = '';$param_str[] = $url;$count = count($param_arr);//生成子父级关系for ($i = $count -1; $i >= 0; $i--) {$tmp_str = '/' . $param_arr[$i] . $tmp_str;$chold_url = str_replace($tmp_str, '/*', $url);if (!in_array($chold_url, $param_str)) {$param_str[] = $chold_url;}}}return $param_str;};//拼接检查数据,兼容单传和传输组的情况$check_list = [];if (is_array($permission_name)) {foreach ($permission_name as $key => $value) {$check_list[$value] = $getUrlList($value);}} else {$check_list[$permission_name] = $getUrlList($permission_name);}if (empty($check_list)) {return false;}//批量检查是否有权限$ret = [];foreach ($check_list as $key => $value) {$ret[$key] = false;foreach ($value as $k => $v) {if (in_array($v, $permission_list)) {$ret[$key] = true;break;}}}//兼容一维数组if (count($ret) == 1) {$ret = array_values($ret);return $ret[0];}return $ret;}
需要说明的是,注释掉的部分是管理员的权限检查,如果是管理员会自动返回所有的权限,但是这种不太好,因为实际情况中会分多种管理员,这样管理员不一定拥有所有的权限,如果这样不是超级管理员就不能使用,所以用的时候还是要慎重,最好统一使用权限检查。如果感觉那个SQL执行太慢可以添加缓存,缓存过期的时间和菜单过期类似,当用户的权限有变动的时候和菜单修改的时候跟新缓存。两一种解决办法是把这个方法协程单利,利用单利只是执行一次权限的查询,检查的阶段可以单独写成方法提供。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在上篇文章给大家介绍了yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考
本文实例讲述了Yii框架ACF(accessController)简单权限控制操作。分享给大家供大家参考,具体如下:useyii\filters\AccessC
本篇的主题是rbac权限控制的详细操作步骤,注意是操作步骤哦,关于配置与rbac的搭建,我们在yii2搭建完美后台并实现rbac权限控制实例教程说的再清楚不过了
本文实例讲述了yii权限控制的方法。分享给大家供大家参考,具体如下:这里摘录以下3种:1.通过accessControl:publicfunctionfilte
因为某种原因,不想用yii自带的user表,想用自己建的admin数据库表,修改如下:1.参考高级模板里里的common\models\User修改Admin2