YII 权限管理
CREATE TABLE IF NOT EXISTS `admin_role` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`update_time` int(10) unsigned NOT NULL default '',
`status` tinyint(1) unsigned NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `admin_role_child` (
`role_id` int(10) unsigned NOT NULL,
`item_id` int(10) unsigned NOT NULL,
KEY `item_id` (`item_id`),
KEY `role_id` (`role_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `admin_role_item` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
`description` text,
`update_time` int(10) unsigned NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
解释一下数据库:
admin_role是角色表,update_time字段是用来做Query Cache的,可要可不要
admin_role_child是权限分配表,只用来保存相应的role拥有的权限
admin_role_item是权限的具体信息,update_time字段也是用来做Query Cache的,可要可不要
然后再说说权限的判断方式:
首先,在数据库保存的权限信息为这种格式:controller/action,就像YII的url route一样,但是他有一种简便的写法,如果要给那个角色某个controller的所有权限,就只要这样写:controller/*
然后,写一个class,扩展自CApplicationComponent或者CAuthManager,无论扩展自那个class,对我这个影响都不大,如果你需要更多的yii原生的class支持,你可以优先考虑CAuthManager。
然后,我的AuthManager里面只有一个方法checkAccess,方法的参数参照CAuthManager的checkAccess,因为要方便CWebUser的调用,代码如下:
* @param array $itemName 需要验证权限的controller id and action id
* @param mixed $userId 需要验证权限的user id
* @param array $params 验证权限附带的参数
* @return boolean 验证结果
*/
public function checkAccess($itemName, $userId, $params=array ( ))
{
$criteria = new CDbCriteria(array('select'=>'is_supper', 'condition'=>'id = :userId', 'params'=>array(':userId'=>$userId)));
$user = Admin::model()->find($criteria);
if ($user->is_supper == 1) return true;
// 获取controller and action
$itemName = explode('/', strtolower($itemName));
$controller = $itemName[0];
$action = $itemName[1];
// 获取会员角色组
$role = AdminRole::model()->getByUser($userId);
Dumper::dump($role->items);Yii::app()->end();
if ($role !== null) foreach ($role->items as $item)
{
// 获取会员角色组权限
$item = explode('/', strtolower($item->name));
// 如果拥有当前控制器权限
if ($item[0] === $controller)
{
// 如果拥有所有权限
if ($item[1] === '*') return true;
// 如果拥有指定权限
else if ($item[1] === $action) return true;
}
}
return false;
}
只要在要验证的时候写句话就行了,Yii::app()->user->checkAccess(这里写要判断的权限);
Form: http://jianghaiming0426.blog.sohu.com/180407079.html
YII 权限管理的更多相关文章
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
- Yii之权限管理扩展 srbac
最近在研究 Yii 的权限控制功能,尽管Yii 自身提供了一个简单的权限管理,但是很多时候,我们还是需要对其做一点扩展. 在这里,我向大家推荐一个不错的扩展:SRBAC. 在Yii的官方网站的exte ...
- Yii框架中使用SRBAC作为权限管理模块时遇到的问题
Yii框架中使用SRBAC作为权限管理模块时遇到的问题 看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整去,安装完了,可就是进不了权限管理界面. 最后想到, ...
- yii2 rbac权限管理学习笔记
下面介绍一个 yii2 的 Rbac 权限管理设置,闲话少说,直接上代码, 1.首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- SpringMVC+Shiro权限管理【转】
1.权限的简单描述 2.实例表结构及内容及POJO 3.Shiro-pom.xml 4.Shiro-web.xml 5.Shiro-MyShiro-权限认证,登录认证层 6.Shiro-applica ...
- Android6.0运行时权限管理
自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...
随机推荐
- PHP生成制作验证码
看完就会,不会你打我,话不多说.开搞(人狠话不多) 1.0 首先先看代码 <?php header("Content-Type:text/html;Charset=UTF-8" ...
- nginx重新加载配置
1.kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 2./usr/local/nginx/sbin/nginx -s reload
- 查看 MySQL 数据库中每个表占用的空间大小
TABLE_SCHEMA : 数据库名TABLE_NAME:表名ENGINE:所使用的存储引擎TABLES_ROWS:记录数DATA_LENGTH:数据大小INDEX_LENGTH:索引大小 SELE ...
- C# 操作XML文件,用XML文件保存信息
using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.IO ...
- POJ 3414 Pots bfs打印方案
题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...
- [BZOJ 2048] [2009国家集训队]书堆 【调和级数】
题目链接:BZOJ - 2048 题目分析 只有一本书时,这本书的重心落在桌子边缘上,伸出桌面的长度就是 1/2. 有两本书时,第一本书的重心就落在第二本书的边缘上,两本书的重心落在桌子边缘上,两本书 ...
- hdu 4433
一道dp题,虽然知道是dp,但是不会做: 学习了ACM_cxlove大神的代码,终于明白了: 搬运工: dp[i][j][k]表示 前i个已经完全匹配,而这时候,第i+1个已经加了j位,第i+2位已经 ...
- Stanford CoreNLP--Named Entities Recognizer(NER)
Standford Named Entities Recognizer(NER),命名实体识别是信息提取(Information Extraction)的一个子任务,它把文字的原子元素(Atomic ...
- android recovery模式及ROM制作
转自android recovery模式及ROM制作 1.总述 为了方便客户日后的固件升级,本周研究了一下android的recovery模式.网上有不少这类的资料,但都比较繁杂,没有一个系统的介绍与 ...
- easyui的datagrid组件,如何设置点击某行不会高亮该行的方式
easyui的datagrid组件,有些时候我们点击某行不想高亮显示,如何设置点击某行不会高亮该行的方式,有好几种方法可以实现,我举几个,可以根据你具体需求灵活应用: 1.修改easyui的css将高 ...