auth php,thinkphp5Auth教程

# thinkphp5 auth 教程

1.表结构

~~~

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 '' COMMENT '用户组中文名称',

`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 : 1为正常,0为禁用',

`rules` char(80) NOT NULL DEFAULT '' COMMENT '规则ID (这里填写的是 tp_auth_rule里面的规则的ID)',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='用户组表';

DROP TABLE IF EXISTS `think_auth_rule`;

CREATE TABLE `think_auth_rule` (

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '规则id',

`name` char(80) NOT NULL DEFAULT '' COMMENT '规则名称,格式 为【模块名/控制器名/方法名】或【自定义规则】,多个规则之间用,隔开即可',

`title` char(20) NOT NULL DEFAULT '' COMMENT '规则中文名称',

`type` tinyint(1) NOT NULL DEFAULT '1'

COMMENT '如果type为1,condition字段就可以定义规则表达式。如定义{score}>5 and {score}<100 表示用户的分数在5-100之间时这条规则才会通过。(默认为1)',

`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1为正常,0为禁用',

`condition` char(100) NOT NULL DEFAULTCOMMENT '规则表达式,不为空and type字段=1 会按照条件验证 ',

PRIMARY KEY (`id`),

UNIQUE KEY `name` (`name`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `think_auth_group_access`;

CREATE TABLE `think_auth_group_access` (

`uid` mediumint(8) unsigned NOT NULL COMMENT '用户id',

`group_id` mediumint(8) unsigned NOT NULL COMMENT '组id',

UNIQUE KEY `uid_group_id` (`uid`,`group_id`),

KEY `uid` (`uid`),

KEY `group_id` (`group_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT ='用户组明细表';

CREATE table think_user(

id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,

name varchar(99) ,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT ='用户表';

~~~

2.介绍

~~~

在 tp_auth_rule里面添加一个或多个验证规则用来验证你的访问权限

(Admin/Article/Add)增加文章的权限

(Admin/Article/Edit)修改文章的权限

(Admin/Article/Delete)删除文章的权限

Ps:这3个规则可以合并成一个规则,合并成一个规则的话就是:

(Admin/Article/Add,Admin/Article/Edit,Admin/Article/Delete);

也可以写成(Article-Add-Edit-Delete)这样的 意思是拥有文章的增删改权限

~~~

3.数据录入

~~~

-- id为1: Admin/Article/Add 增加文章的权限

-- id为2: Admin/Article/Edit 修改文章的权限

-- id为3: Admin/Article/Delete 删除文章的权限

-- id为4: Article-Add-Edit-Delete 拥有文章的增删改权限

insert into think_auth_rule (name,title)

select 'Admin/Article/Add','增加文章的权限';

insert into think_auth_rule (name,title)

select 'Admin/Article/Edit','修改文章的权限';

insert into think_auth_rule (name,title)

select 'Admin/Article/Delete','删除文章的权限';

insert into think_auth_rule (name,title)

select 'Article-Add-Edit-Delete','拥有文章的增删改权限';

-- 信息录入部门的 rules需要的规则为: 1,2,3

-- 信息审核部门需要的是:2,3

-- 信息管理部门需要的是 4

INSERT into think_auth_group (title,rules)

select '信息录入部门','1,2,3';

INSERT into think_auth_group (title,rules)

select '信息审核部门','2';

INSERT into think_auth_group (title,rules)

select '信息管理部门','4';

-- 录入用户信息

insert into think_user (name)

select '小红' union select '小明' union select '小张' union select '小李'

-- 下面分配权限:

-- 小红和小明是信息录入部门的:

-- 那么tp_auth_access如下:

-- uid为 1 的小红 所属认证部为 1(1也就是认证组表中的信息录入部门,拥有增加、修改、删除的权限)

-- uid为 2 的小明 同小红一个级别(功能一样)

-- uid为 3 的小张 所属认证部为 2 (2也就是认证组表中的信息审核部,拥有修改、删除的权限)

-- uid为 4 的小李 所属认证部为 3 (3也就是认证表中的信息XX部 拥有信息的 增加、修改、删除的权限)

INSERT into think_auth_group_access

select 1,1

UNION

select 2,1

union

select 3,2

UNION

select 4,3

~~~

4.权限认证类基本使用

~~~

1,是对规则进行认证,不是对节点进行认证。用户可以把节点当作规则名称实现对节点进行认证。

$auth=new Auth(); $auth->check('规则名称','用户id');

2,可以同时对多条规则进行认证,并设置多条规则的关系(or或者and)

$auth=new Auth(); $auth->check('规则1,规则2','用户id','and')

第三个参数为and时表示,用户需要同时具有规则1和规则2的权限。 当第三个参数为or时,表示用户值需要具备其中一个条件即可。默认为or

3,一个用户可以属于多个用户组(think_auth_group_access表 定义了用户所属用户组)。我们需要设置每个用户组拥有哪些规则(think_auth_group 定义了用户组权限)

4,支持规则表达式。

在think_auth_rule 表中定义一条规则时,如果type为1, condition字段就可以定义规则表达式。 如定义{score}>5 and {score}<100 表示用户的分数在5-100之间时这条规则才会通过。

~~~

6.auth 配置

~~~

Ps:在使用auth之前,要先配置下auth所用的配置项:

如果你没修改auth_rule,auth_group,auth_group_access表名称的话,只要配置你的会员表即可。在配置项中增加以下配置项:

//Auth配置

'auth' => array(

// 用户组数据表名

//'auth_group' => 'tp_group',

// 用户-用户组关系表

//'auth_group_access' => 'tp_group_access',

// 权限规则表

//'auth_rule' => 'tp_rule',

// 用户信息表

'auth_user' => 'think_user'

),

~~~

7.开始测试

~~~

$auth = new Auth();

/*

验证单个条件

验证 会员id 为 1 的 小红是否有 增加信息的权限

check方法中的参数解释:

参数1:Admin/Article/Add 假设我现在请求 Admin模块下Article控制器的Add方法

参数2: 1 为当前请求的会员ID

*/

$check = $auth->check('Admin/Article/Add','1');

dump($check); //返回值true,代表有此权限

//检查用户id号等于3的,是否有此权限

$check = $auth->check('Admin/Article/Add','3');

dump($check); //返回值false,没有此权限

/*

同时验证多个条件

验证 会员id 为 1 的小红是否有增加信息,修改信息 和一个不存在的规则 的权限

参数解释:

参数1:多条规则同时验证 , 验证是否拥有增加、修改、删除的权限

参数2:当前请求的会员ID

*/

$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1');

dump($check); // ps :CF是一个不存在的规则为什么会返回真呢? 因为check方法 第5个参数默认为 or 也就是说 多个规则中只要满足一个条件即为真

$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1','and');

dump($check); // false

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值