Yii中srbac权限扩展模块的示例分析
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,小编给大家分享一下Yii中srbac权限扩展模块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:1. 设
千家信息网最后更新 2025年11月10日Yii中srbac权限扩展模块的示例分析
小编给大家分享一下Yii中srbac权限扩展模块的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
具体如下:
1. 设置权限规则表:可放在module模块配置文件里面
public function init() { //操作权限表,必须存在以下字段: //itemname角色名/ID, //type授权项目类型/1(任务)或者2(角色), //bizrule权限/逻辑运算表达式为false是有权限操作, //data数据/YII暂无利用 Yii::app()->authManager->itemTable = 'AuthItem'; //会员组-权限对应表,必须存在以下字段: //child子角色/ID, //parent父角色/ID,此表可循环执行,可多级继承 Yii::app()->authManager->itemChildTable = 'uthItemChild'; //会员-会员组对应表,会员组可直接为操作名称,必须存在以下字段: //itemname角色名/ID, //userid用户名/ID, //bizrule权限/逻辑运算表达式为false是有权限操作, //data数据/YII暂无利用 Yii::app()->authManager->assignmentTable = 'zd_mem_glog';2. 实现规则,所在控制器继承基类SBaseController,原来为Controller
class ProductController extends SBaseController{ ........}class SBaseController extends Controller{ ........}3. SBaseController继承基类Controller,前填加beforeAction,实现权限验证。
protected function beforeAction($action) { //载入模块分隔符 $del = Helper::findModule('srbac')->delimeter; //取得前模块名称 $mod = $this->module !== null ? $this->module->id . $del : ""; $contrArr = explode("/", $this->id); $contrArr[sizeof($contrArr) - 1] = ucfirst($contrArr[sizeof($contrArr) - 1]); $controller = implode(".", $contrArr); $controller = str_replace("/", ".", $this->id); // 生成静态页面 模块+分隔符+控制器(首字母大写)+方法(首字母大写)例: model-ControllerAction if(sizeof($contrArr)==1){ $controller = ucfirst($controller); } $access = $mod . $controller . ucfirst($this->action->id); //验证访问页面地址是否在总是允许列表里面,是返回有权限 if (in_array($access, $this->allowedAccess())) { return true; } //验证SRBAC有无安装,没在安装,返回的权限访问 if (!Yii::app()->getModule('srbac')->isInstalled()) { return true; } //验证SRBAC有无开启,没在开启,返回的权限访问 if (Yii::app()->getModule('srbac')->debug) { return true; } // 权限验证 if (!Yii::app()->user->checkAccess($access) || Yii::app()->user->isGuest) { $this->onUnauthorizedAccess(); } else { return true; }}4. CDbAuthManager读取当前用户角色
public function getAuthAssignments($userId){ $rows=$this->db->createCommand() ->select() ->from($this->assignmentTable) ->where('userid=:userid', array(':userid'=>$userId)) ->queryAll(); $assignments=array(); foreach($rows as $row) { if(($data=@unserialize($row['data']))===false) $data=null; $assignments[$row['itemname']]=new CAuthAssignment($this,$row['itemname'],$row['userid'],$row['bizrule'],$data); } return $assignments;}5. CDbAuthManager读取角色对应权限
public function getAuthItem($name){ $row=$this->db->createCommand() ->select() ->from($this->itemTable) ->where('name=:name', array(':name'=>$name)) ->queryRow(); if($row!==false) { if(($data=@unserialize($row['data']))===false) $data=null; return new CAuthItem($this,$row['name'],$row['type'],$row['description'],$row['bizrule'],$data); } else return null;}6. CDbAuthManager读取权限对应操作
protected function checkAccessRecursive($itemName,$userId,$params,$assignments){ if(($item=$this->getAuthItem($itemName))===null) return false; Yii::trace('Checking permission "'.$item->getName().'"','system.web.auth.CDbAuthManager'); if(!isset($params['userId'])) $params['userId'] = $userId; if($this->executeBizRule($item->getBizRule(),$params,$item->getData())) { if(in_array($itemName,$this->defaultRoles)) return true; if(isset($assignments[$itemName])) { $assignment=$assignments[$itemName]; if($this->executeBizRule($assignment->getBizRule(),$params,$assignment->getData())) return true; } $parents=$this->db->createCommand() ->select('parent') ->from($this->itemChildTable) ->where('child=:name', array(':name'=>$itemName)) ->queryColumn(); foreach($parents as $parent) { if($this->checkAccessRecursive($parent,$userId,$params,$assignments)) return true; } } return false;}7. CAuthManager验证权限
public function executeBizRule($bizRule,$params,$data){ return $bizRule==='' || $bizRule===null || ($this->showErrors ? eval($bizRule)!=0 : @eval($bizRule)!=0);}8. 总是充许访问规则设置
以上是"Yii中srbac权限扩展模块的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
权限
角色
模块
验证
会员
字段
篇文章
规则
示例
分析
内容
分隔符
名称
大写
字母
控制器
数据
用户
表达式
逻辑
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云都网络安全新时代
摩尔庄园不同服务器怎么能一起玩
京津泰晤士报数据库免费
成都顶呱呱网络技术公司
我的世界收藏物品在服务器怎么取
美团用什么软件开发票
绝地求生蓝洞服务器怎么用
数据库专家 招聘
云服务器现状
网络安全专业学校哪家强
在安卓中建数据库外键
微信开放平台官方服务器
开发票显示数据库已存在
数据库时间戳 同步
兰拓测评数据库尼康18 35G
南京物流软件开发工程师
删除数据库表所有数据
图片数据库建设
网络安全员上班时间
华为服务器电源改电脑电源
俄罗斯国防数据库
软件开发各角色简称及职责
网络安全等级保护 异地灾备
网络安全志愿者个人特长
数据库中的表对应三级模式有几个
国产信创服务器什么价位
新密app软件开发公司
单选计算机网络技术包含
天津通讯软件开发服务标准
怎么查看自己数据库