TP框架中,关于对auth权限分配的理解
来源:互联网 发布:树莓派部署python环境 编辑:程序博客网 时间:2024/06/05 09:20
最近正在和总工做一个项目,学着练着,练着不会了就抓紧学。本身基础不好,那就使劲儿啃呗。
今天的主题,一个综合性网站后台中,免不了要有管理员和普通员工。而管理员可以访问的后台页面相对于普通会员是不一样的,管理员的权限比较高,可以任意的增删改查,而普通员工只能访问固定的页面和新建文章。而这些问题可以通过ThinkPHP系统内自带的auth类来指定规则和验证此用户是否有符合规则。
auth翻译成中文也就是认证的意思。
首先ThinkPHP版本:ThinkPHP3.2.3完整版。auth类在核心板是没有的,完整版才有。
1,打开Thinkphp/library/think/auth.class.php文件,类中第一句就说明了默认配置的问题,首先需要四张表,auth_group:用户组数据表、auth_group_access:用户和用户组的关系表、auth_rule:权限规则表、user:你自己的用户表。
这些表定义好之后,将这些复制到应用级别的config.php文件中,类似于数据库类的复制。
2.之后我们开始创建我们的数据表:可以使用下列代码、
//数据库/*-- ------------------------------ think_auth_rule,规则表,-- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证-- ---------------------------- DROP TABLE IF EXISTS `think_auth_rule`;CREATE TABLE `think_auth_rule` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(80) NOT NULL DEFAULT '', `title` char(20) NOT NULL DEFAULT '', `type` tinyint(1) NOT NULL DEFAULT '1', `status` tinyint(1) NOT NULL DEFAULT '1', `condition` char(100) NOT NULL DEFAULT '', # 规则附件条件,满足附加条件的规则,才认为是有效的规则 PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ------------------------------ think_auth_group 用户组表, -- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用-- ---------------------------- DROP TABLE IF EXISTS `think_auth_group`;CREATE TABLE `think_auth_group` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` char(100) NOT NULL DEFAULT '', `status` tinyint(1) NOT NULL DEFAULT '1', `rules` char(80) NOT NULL DEFAULT '', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ------------------------------ think_auth_group_access 用户组明细表-- uid:用户id,group_id:用户组id-- ----------------------------DROP TABLE IF EXISTS `think_auth_group_access`;CREATE TABLE `think_auth_group_access` ( `uid` mediumint(8) unsigned NOT NULL, `group_id` mediumint(8) unsigned NOT NULL, UNIQUE KEY `uid_group_id` (`uid`,`group_id`), KEY `uid` (`uid`), KEY `group_id` (`group_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; */
auth_rule表:
id:表的主键,自增,标识。
name:认证规则(格式: 模块名\控制器名\方法名)
title:对认证规则的描述
type:tinyint类型,如果type=1,则condition字段就可以定义规则表达式。
condition:当type=1时,condition字段里边的内容将会用正则表达式的规则来配合规则认证用户。
auth_group表:
id:认证组别的标识,主键自增。
title:组别名称。
status:默认1为开启,0为关闭。
rules:规则的id(也就是auth_rule表中的id)。
auth_group_access表:
uid:会员ID(这里的id其实就是你自己user表中的id,你想规定哪个id需要哪一项权限,就填进去就可以)。
group_id:认证组别的id(auth_group中分组的id)。
三张表的结构已经讲清楚了,可能看了之后还不太明白。
其实auth类的验证流程是这样的:首先获取登录时用户的session['id'] -> 判断用户处于什么分组 -> 判断此分组规则 -> 通过规则验证成功,不通过返回。
具体点就是,假如说session['id'] = 1 ,auth会将此id拿到auth_group_access表中对照这个id属于什么分组。假如说id=1属于1分组,系统会再拿着分组1到auth_group表中核对分组1属于哪一项规则id,然后再拿着这一项规则id去auth_rule表中查找规则,查找到规则之后,再与check()方法中的规则相比对,相同返回true,不同返回false。还有status和type没有说,其实就是status=0的话,则这条规则不存在。type=1时,如果condition中有正则表达式,系统会再此验证是否符合正则。
通过实例来说吧:
1,我们要将auth.class.php中的配置语句复制到分组级别的配置文件当中:
'AUTH_CONFIG'=>array( 'AUTH_ON' => true, //认证开关 'AUTH_TYPE' => 1, // 认证方式,1为时时认证;2为登录认证。 'AUTH_GROUP' => 'think_auth_group', //用户组数据表名 'AUTH_GROUP_ACCESS' => 'think_auth_group_access', //用户组明细表 'AUTH_RULE' => 'think_auth_rule', //权限规则表 'AUTH_USER' => 'sp_user'//用户信息表 ) ,
2,然后在分组控制器中添加
public function _initialize() { $id = (int)session('id'); if(empty($id)) { $url = U('Public/login'); echo "<script>top.location.href='$url'</script>"; } $auth = new \Think\Auth(); var_dump( $auth->check( 'Admin/Dept/showList', $id ) ); var_dump( $auth->check( 'Admin/admin/home', $id ) ); var_dump( $auth->check( 'Admin/Dept/edit', $id ) ); if( $auth->check( 'Admin/Dept/add', $id ) == true){ echo "i love likui"; }else{ echo "oh my god!"; }; }var_dump返回true or false。同样可以用if循环判断。
可以同时对多条规则进行认证,并设置多条规则的关系(or或者and)
$auth=new Auth(); $auth->check('规则1,规则2','用户id','and');
在验证的时候可以用 MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME 来自动获取当前的 模块名称/控制器名称/方法名称例如: $auth->check( MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME, 1 ) );
- TP框架中,关于对auth权限分配的理解
- TP框架中对数据库的 操作
- 一个小白对auth的理解
- thinkphp中Auth权限类的使用
- TP框架中,对数据的过滤函数
- 关于TP框架中验证码的制作
- 关于TP字段field的一些理解
- 关于tp框架的方法返回值
- 对权限的理解
- tp 关于TMPL_PARSE_STRING 理解
- thinkphp的 Auth权限认证
- ThinkPHP5的权限控制Auth
- 谈对C语言中内存分配的理解
- ThinkPHP3.2.3完整版中对Auth.class.php的使用
- ThinkPHP3.2.3完整版中对Auth.class.php的使用
- tp框架中自定义类的调用
- tp框架中const的设置问题
- tp框架中模板赋值的简化
- Android Camera2 Opengles2.0 预览图像实时滤镜 视频编码
- phyton如何遍历全国的经纬度数据
- 移除CSDN各种广告
- 记录Android Studio常用的插件
- iptables详解
- TP框架中,关于对auth权限分配的理解
- openstack社区贡献记录
- Gradle for Android(三)——依赖管理(二)
- 剑指offer 菲波那切数列
- zabbix在windows下安装agent监控
- 【JavaScript学习】BOM:history对象
- (最小点覆盖 匈牙利算法)--pojMachine Schedule
- RabbitMQ四种交换机
- 算法学习(2):BFS/DFS-广度优先/深度优先