广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >详解thinkphp的Auth类认证
  • 593
分享到

详解thinkphp的Auth类认证

2024-04-02 19:04:59 593人浏览 八月长安
摘要

RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如我想按积分进行

RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如我想按积分进行权限认证, 积分在0-100时能干什么, 在101-200时能干什么。 这些权限认证用RABC都很困难。

下面介绍 Auth权限认证, 它几乎是全能的, 除了能进行节点认证, 上面说的RABC很难认证的两种情况,它都能实现。
Auth权限认证是按规则进行认证。我先说说它的原理。 在数据库中我们有 规则表(think_auth_rule),用户组表(think_auth_group), 用户组明显表(think_auth_group_access)

我们在规则表中定义权限规则 , 在用户组表中定义每个用户组有哪些权限规则,在用户组明显表中 定义用户所属的用户组。 下面举例说明。

我们要判断用户是否有显示一个操作按钮的权限, 首先定义一个规则, 在规则表中添加一个名为show_button的规则。 然后在用户组表添加一个用户组,定义这个用户组有show_button的权限规则(think_auth_group表中rules字段存得时规则ID,多个以逗号隔开), 然后在用户组明细表定义 UID 为1 的用户 属于刚才这个的这个用户组。
ok,表数据定义好后, 判断权限很简单


import('ORG.Util.Auth');//加载类库
    $auth=new Auth();
    if($auth->check('show_button',1)){// 第一个参数是规则名称,第二个参数是用户UID
     //有显示操作按钮的权限
   }else{
     //没有显示操作按钮的权限
   }

Auth类同样可以做像RBAC一样的对节点进行认证。 我们只要将规则名称,定义为节点名称就行了。
和RABC一样 在公共控制器CommonAction中定义_initialize方法,


<?PHP
class CommonAction extends Action{
    public function _initialize(){
        import('ORG.Util.Auth');//加载类库
        $auth=new Auth();
        if(!$auth->check(MODULE_NAME.'-'.ACTION_NAME,session('uid'))){
        $this->error('你没有权限');
        }
    }
}

这时候我们可以在数据库中添加的节点规则, 格式为: “控制器名称-方法名称”

Auth 类 还可以多个规则一起认证 如:


$auth->check('rule1,rule2',uid); 

表示 认证用户只要有rule1的权限或rule2的权限,只要有一个规则的权限,认证返回结果就为true 即认证通过。 默认多个权限的关系是 “or” 关系,也就是说多个权限中,只要有个权限通过则通过。 我们也可以定义为 “and” 关系


$auth->check('rule1,rule2',uid,'and'); 

第三个参数指定为"and" 表示多个规则以and关系进行认证, 这时候多个规则同时通过认证 才有权限。只要一个规则没有权限则就会返回false。

Auth认证,一个用户可以属于多个用户组。 比如我们对 show_button这个规则进行认证, 用户A 同时属于 用户组1 和用户组2 两个用户组 , 用户组1 没有show_button 规则权限, 但如果用户组2 有show_button 规则权限,则一样会权限认证通过。


$auth->getGroups(uid)

通过上面代码,可以获得用户所属的所有用户组,方便我们在网站上面显示。

Auth类还可以按用户属性进行判断权限, 比如 按照用户积分进行判断, 假设我们的用户表 (think_members) 有字段 score 记录了用户积分。

我在规则表添加规则时,定义规则表的condition字段,condition字段是规则条件, 默认为空 表示没有附加条件, 用户组中只有规则 就通过认证。 如果定义了 condition字段, 用户组中有规则 不一定能通过认证, 程序还会判断是否满足 附加条件。

比如我们添加几条规则:

name字段: grade1 , condition字段: {score}<100

name字段: grade2, condition字段: {score}>100 and {score}<200

name 字段: grade3, condition字段 : {score}>200 and {score}<300

这里 {score} 表示 think_members 表 中字段 score的值。

那么这时候

$auth->check('grade1',uid) 是判断用户积分是不是0-100
$auth->check('grade2',uid) 判断用户积分是不是在100-200
$auth->check('grade3',uid) 判断用户积分是不是在200-300

Auth 类认证的使用方法 大致如上,是否有点相见恨晚的感觉?
----------------------------------------------------

在使用Auth类前需要配置config.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' => 'think_members'//用户信息表
)

需要导入数据库


-- ----------------------------
-- 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 '',  
    `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;

以上就是详解thinkphp的Auth类认证的详细内容,更多关于thinkphp的Auth类认证的资料请关注编程网其它相关文章!

--结束END--

本文标题: 详解thinkphp的Auth类认证

本文链接: https://www.lsjlt.com/news/127021.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解thinkphp的Auth类认证
    RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如我想按积分进行...
    99+
    2022-11-12
  • thinkphp中Auth类认证的示例分析
    这篇文章主要介绍了thinkphp中Auth类认证的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,...
    99+
    2023-06-15
  • pymongo连接认证 auth failed解决方法
    要解决pymongo连接认证失败(auth failed)的问题,需要遵循以下步骤:1. 确保MongoDB服务器已启用身份验证。默...
    99+
    2023-10-12
    pymongo
  • mongodb开启auth认证失败怎么解决
    如果在 MongoDB 中开启了身份验证(auth)认证,并且认证失败,可以尝试以下解决方案:1. 检查用户名和密码是否正确:确保输...
    99+
    2023-08-29
    mongodb
  • Django中auth模块用户认证的使用
    目录auth模块是什么auth模块常用方法authenticate()login(HttpRequest, user)logout(request)is_authenticated(...
    99+
    2023-03-20
    Django auth模块用户认证 Django auth模块
  • Springboot实现通用Auth认证的几种方式
    目录前言 传统AOP实现 扩展 Interceptor实现 扩展 ArgumentResolver实现扩展 Filter扩展 小结前言 最近一直被无尽的业务需求淹没,没时间喘息,终...
    99+
    2022-11-12
  • asp.netcore认证和授权实例详解
    目录正文认证是什么授权是什么认证和授权的关系正文 使用asp.net core 开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,...
    99+
    2022-11-13
  • 一文详解Node中express的身份认证
    基于前后端分离的新型Web开发模式前后端分离的概念:前后端分离的开发模式,依赖于Ajax技术的广泛应用。简而言之,前后端分离的Web开发模式,就是后端只负责提供API接口,前端使用Ajax调用接口的开发模式。前后端分离的优缺点优点:1)开发...
    99+
    2023-05-14
    node Express
  • Security登录认证流程详细分析详解
    目录一、前言:流程图:二、前台发送请求三、请求到达UsernamePasswordAuthenticationFilter过滤器四、制作UsernamePasswordAuthent...
    99+
    2022-11-12
  • Spring Security认证器实现过程详解
    目录拦截请求验证过程返回完整的Authentication收尾工作结论一些权限框架一般都包含认证器和决策器,前者处理登陆验证,后者处理访问资源的控制 Spring Security的...
    99+
    2022-11-13
  • 详解Redis使用认证密码登录
    Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器的host和port正确,就可以连接使用。这在安全性上会有一定的问题,所以需要启用Redis的认证密码,增加Redis服务器的安全性。...
    99+
    2022-06-04
    详解 密码 Redis
  • 想了解下Oracle认证的种类有哪些呢?
    ...
    99+
    2020-08-17
    想了解下Oracle认证的种类有哪些呢?
  • C++中类的默认成员函数详解
    目录一、构造函数二、析构函数三、拷贝构造函数四、赋值函数(赋值运算符重载)总结C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声明)—&md...
    99+
    2022-11-13
  • 在 SSH 中使用 RSA 和 DSA 认证(详解)
    [原贴]http://weblog.kreny.com/archives/2005/10/rsadsa_authenti.html  [作者]:kreny一直想把自己的服务器的 SSH 认证的模式从用户名密码模式转换成 ...
    99+
    2023-06-06
  • 阿里云服务器域名认证详解
    本文将详细说明如何在阿里云服务器上进行域名认证,包括准备工作、操作步骤以及常见问题解答。 一、准备工作 在进行阿里云服务器域名认证前,你需要准备以下材料: 1. 阿里云服务器的账号和密码。 2. 域名注册证书。二、操作步骤 1. 登录阿里云...
    99+
    2023-12-12
    阿里 详解 服务器
  • MongoDB开启权限认证的方法步骤详解
    前言 最近在生产环境中MongoDB已经使用有一段时间了,但对于MongoDB的数据存储一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),最近在酷壳网看了一篇技术文章(https://coo...
    99+
    2022-10-18
  • Spring Security自定义认证逻辑实例详解
    目录前言分析问题自定义 Authentication自定义 Filter自定义 Provider自定义认证成功/失败后的 Handler配置自定义认证的逻辑测试总结前言 这篇文章的内...
    99+
    2022-11-13
  • Django Rest Framework实现身份认证源码详解
    目录一.Django框架二.身份认证的两种实现方式:三.身份认证源码解析流程一.Django框架 Django确实是一个很强大,用起来很爽的一个框架,在Rest Framework中...
    99+
    2022-11-11
  • Python web框架实现增加BasicAuth认证详解
    目录什么是http BashAuthBasicAuth认证底层原理将BasicAuth认证添加到框架中框架功能测试总结上一篇文章,我们已经为框架定义了【响应对象】,该框架不仅可以获取...
    99+
    2023-05-19
    Python实现增加BasicAuth认证 Python增加BasicAuth认证 Python BasicAuth认证
  • thinkphp的token验证失败如何解决
    本篇内容主要讲解“thinkphp的token验证失败如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp的token验证失败如何解决”吧!thinkphp的token验证失败...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作