好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php权限认证种类 php权限设计

很多站长朋友们都不太清楚php权限认证种类,今天小编就来给大家整理php权限认证种类,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 php考什么证书 2、 thinkphp权限auth有几个表 3、 thinkphp的auth权限和rbac有什么区别 4、 php有什么认证考试? 5、 thinkphp 权限认证类怎么用 php考什么证书

php可以考的证书有很多,比如PHP专业工程师联合证、Zend Certified Enginee和国家教育部“岗位任职合格证书”等。比如PHP专业工程师联合证是国内首家由业界名企业联合签发认证的PHP行业培训认证。

thinkphp权限auth有几个表

/**

 * 权限认证类

 * 功能特性:

 * 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之间时这条规则才会通过。

 */

//数据库

/*

-- ----------------------------

-- 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;

 */

thinkphp的auth权限和rbac有什么区别

相同点:

1.两种都是基于角色权限控制

2.都是同一个用户可属于多个角色或用户组

不同点:

Rbac:

1.Rbac是基于节点控制,根据3级节点,module,controller,action,节点类似与树形结构,3级节点间相互有关联

2.表关系:用户表->用户角色关联表->角色表->角色节点关联表->节点表

3.根据3级节点控制,粒度到操作action,每个节点为单一的模块,控制器或操作

Auth:

1.Auth是基于规则控制,定制规则和条件表达式 ,每一条规则都是独立的

2.表关系:用户表->用户和用户组关联表->用户组表->规则表

3.根据规则控制,可自由定制不同的规则,非常自由,同一个规则内可以定制多个不同节点(中间的关系:OR AND)

4.可定制规则表达式,比如定制积分表达式

想法和问题:

Auth:

1.Auth验证多条规则时条件表达式不起效果

2.Auth官方例子只说一个根据积分的规则,假如我规则"Admin/Goods/goodsList,Admin/Goods/goodsDel"我

能不能定义这里面的某些ID所属角色操作权限的规则表达式,而这些所属角色id是goods表里的某个字段,可能所属的角色是多个不同的角色?

3.Auth不支持"Admin/*"泛解析,因为他每一条规则都是独立的

4.对菜单,页面,按钮类的显示使用Auth会必Rbac更好更方便

Rbac:

1.新手配置Rbac的时候经常出现 Rbac $_SESSION['_access_list'] 获取不到的问题,因为Rbac是使用ThinkPHP的底层DB引擎DSN连接数据库,需要配置数据库链接和5个表的关系,字段名和表名不能出现问题

2.允许完成"Admin/*"类型的泛解析,比如这里直接定制一个Admin模块的节点,不要下级节点就可以了

通用:

1.不管是Rbac的角色表或者Auth里面的用户组表也好,都可以扩展,比如对角色或用户组进行多层分级

2.Rbac的节点和Auth的规则都可以进行分级,比如前端功能权限,后端功能权限,后端某个功能模块权限等等

3.上面两个东西都不能应用到权限管控之中去,比如Rbac不能分享上级角色权限,Auth用户组也不能,但是能更好的管理和更加流程化的操作.

php有什么认证考试?

PHP的认证,截止2018年只有3个:

1、PHP专业工程师联合证:PHP专业工程师联合证是国内首家由业界名企业联合签发认证的PHP行业培训认证,PHP专业工程师联合证书由PHP100中文网、PHPWind、DedeCMS三家联合签名认证,含金量高。

2、Zend Certified Engineer:美国Zend Technologies公司的PHP工程师认证,这个认证的含金量是最高的,而且这也是全球第一个PHP认证。

3、国家教育部“岗位任职合格证书”:这个认证英文缩写为“SIC”,是为社会培养实践能力和管理能力结合的管理型技术人才为主要特色、全国性的培训认证项目。

扩展资料

PHP技术人才,正迎合了目前的互联网的发展趋势;PHP作为非常优秀的、简便的Web开发语言,和Linux,Apache,MySQL紧密结合,形成LAMP的开源黄金组合,不仅降低使用成本,还提升了开发速度,满足最新的互动式网络开发的应用,这使得php软件工程师成为一个发展迅速的职业。

PHP工程师需掌握技能:

Thinkphp,Yii,Laravel的熟悉使用,增删改查必备。了解进阶技,数据库索引和优化,分表分库,经常使用memcache和redis,了解前端。了解Linux常用指令,熟悉memcache和redis原理,算法和数据结构的熟悉使用,Hadoop,hive,spark的熟练。

参考资料来源:百度百科:PHP

thinkphp 权限认证类怎么用

ThinkPHP权限认证Auth实例详解ThinkPHP权限认证Auth实例,

本文以实例代码的形式深入剖析了ThinkPHP权限认证Auth的实现原理与方法,具体步骤如下:

mysql数据库部分sql代码:

?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 -- ---------------------------- -- Table structure for think_auth_group -- ---------------------------- 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 AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户组表'; -- ---------------------------- -- Records of think_auth_group -- ---------------------------- INSERT INTO `think_auth_group` VALUES ('1', '管理组', '1', '1,2'); -- ---------------------------- -- Table structure for think_auth_group_access -- ---------------------------- 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='用户组明细表'; -- ---------------------------- -- Records of think_auth_group_access -- ---------------------------- INSERT INTO `think_auth_group_access` VALUES ('1', '1'); INSERT INTO `think_auth_group_access` VALUES ('1', '2'); -- ---------------------------- -- Table structure for think_auth_rule -- ---------------------------- 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 '' COMMENT '规则唯一标识', `title` char(20) NOT NULL DEFAULT '' COMMENT '规则中文名称', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:为1正常,为0禁用', `type` char(80) NOT NULL, `condition` char(100) NOT NULL DEFAULT '' COMMENT '规则表达式,为空表示存在就验证,不为空表示按照条件验证', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='规则表'; -- ---------------------------- -- Records of think_auth_rule -- ---------------------------- INSERT INTO `think_auth_rule` VALUES ('1', 'Home/index', '列表', '1', 'Home', ''); INSERT INTO `think_auth_rule` VALUES ('2', 'Home/add', '添加', '1', 'Home', ''); INSERT INTO `think_auth_rule` VALUES ('3', 'Home/edit', '编辑', '1', 'Home', ''); INSERT INTO `think_auth_rule` VALUES ('4', 'Home/delete', '删除', '1', 'Home', ''); DROP TABLE IF EXISTS `think_user`; CREATE TABLE `think_user` ( `id` int(11) NOT NULL, `username` varchar(30) DEFAULT NULL, `password` varchar(32) DEFAULT NULL, `age` tinyint(2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of think_user -- ---------------------------- INSERT INTO `think_user` VALUES ('1', 'admin', '21232f297a57a5a743894a0e4a801fc3', '25');

配置文件Application\Common\Conf\config.php部分:

?12345678910111213141516171819202122 <?php return array( //'配置项'=>'配置值' 'DB_DSN' => '', // 数据库连接DSN 用于PDO方式 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' => 'thinkphp', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => 'root', // 密码 'DB_PORT' => 3306, // 端口 'DB_PREFIX' => 'think_', // 数据库表前缀 '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_user'//用户信息表 ) );

项目Home控制器部分Application\Home\Controller\IndexController.class.php代码:

?123456789101112131415161718192021222324 <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index() { $Auth = new \Think\Auth(); //需要验证的规则列表,支持逗号分隔的权限规则或索引数组 $name = MODULE_NAME . '/' . ACTION_NAME; //当前用户id $uid = '1'; //分类 $type = MODULE_NAME; //执行check的模式 $mode = 'url'; //'or' 表示满足任一条规则即通过验证; //'and'则表示需满足所有规则才能通过验证 $relation = 'and'; if ($Auth->check($name, $uid, $type, $mode, $relation)) { die('认证:成功'); } else { die('认证:失败'); } } }

以上这些代码就是最基本的验证代码示例。

下面是源码阅读:

1、权限检验类初始化配置信息:

?1 $Auth = new \Think\Auth();

创建一个对象时程序会合并配置信息

程序会合并Application\Common\Conf\config.php中的AUTH_CONFIG数组

?1234567891011 public function __construct() { $prefix = C('DB_PREFIX'); $this->_config['AUTH_GROUP'] = $prefix . $this->_config['AUTH_GROUP']; $this->_config['AUTH_RULE'] = $prefix . $this->_config['AUTH_RULE']; $this->_config['AUTH_USER'] = $prefix . $this->_config['AUTH_USER']; $this->_config['AUTH_GROUP_ACCESS'] = $prefix . $this->_config['AUTH_GROUP_ACCESS']; if (C('AUTH_CONFIG')) { //可设置配置项 AUTH_CONFIG, 此配置项为数组。 $this->_config = array_merge($this->_config, C('AUTH_CONFIG')); } }

2、检查权限:

?1 check($name, $uid, $type = 1, $mode = 'url', $relation = 'or')

大体分析一下这个方法

首先判断是否关闭权限校验 如果配置信息AUTH_ON=>false 则不会进行权限验证 否则继续验证权限

?123 if (!$this->_config['AUTH_ON']) { return true; }

获取权限列表之后会详细介绍:

?1 $authList = $this->getAuthList($uid, $type);

此次需要验证的规则列表转换成数组:

?12345678 if (is_string($name)) { $name = strtolower($name); if (strpos($name, ',') !== false) { $name = explode(',', $name); } else { $name = array($name); } }

所以$name参数是不区分大小写的,最终都会转换成小写

开启url模式时全部转换为小写:

?123 if ($mode == 'url') { $REQUEST = unserialize(strtolower(serialize($_REQUEST))); }

权限校验核心代码段之一,即循环所有该用户权限 判断 当前需要验证的权限 是否 在用户授权列表中:

?12345678910111213 foreach ($authList as $auth) { $query = preg_replace('/^.+\?/U', '', $auth);//获取url参数 if ($mode == 'url' $query != $auth) { parse_str($query, $param); //获取数组形式url参数 $intersect = array_intersect_assoc($REQUEST, $param); $auth = preg_replace('/\?.*$/U', '', $auth);//获取访问的url文件 if (in_array($auth, $name) $intersect == $param) { //如果节点相符且url参数满足 $list[] = $auth; } } else if (in_array($auth, $name)) { $list[] = $auth; } }

in_array($auth, $name) 如果 权限列表中 其中一条权限 等于 当前需要校验的权限 则加入到$list中

注:

?12345678910111213 $list = array(); //保存验证通过的规则名 if ($relation == 'or' and !empty($list)) { return true; } $diff = array_diff($name, $list); if ($relation == 'and' and empty($diff)) { return true; } $relation == 'or' and !empty($list); //当or时 只要有一条是通过的 则 权限为真 $relation == 'and' and empty($diff); //当and时 $name与$list完全相等时 权限为真

3、获取权限列表:

?1 $authList = $this->getAuthList($uid, $type); //获取用户需要验证的所有有效规则列表

这个主要流程:

获取用户组

?12 $groups = $this->getGroups($uid); //SELECT `rules` FROM think_auth_group_access a INNER JOIN think_auth_group g on a.group_id=g.id WHERE ( a.uid='1' and g.status='1' )

简化操作就是:

?1 SELECT `rules` FROM think_auth_group WHERE STATUS = '1' AND id='1'//按正常流程 去think_auth_group_access表中内联有点多余....!

取得用户组rules规则字段 这个字段中保存的是think_auth_rule规则表的id用,分割

$ids就是$groups变量最终转换成的 id数组:

?12345 $map = array( 'id' => array('in', $ids), 'type' => $type, 'status' => 1, );

取得think_auth_rule表中的规则信息,之后循环:

?123456789101112131415 foreach ($rules as $rule) { if (!empty($rule['condition'])) { //根据condition进行验证 $user = $this->getUserInfo($uid); //获取用户信息,一维数组 $command = preg_replace('/\{(\w*?)\}/', '$user[\'\\1\']', $rule['condition']); //dump($command);//debug @(eval('$condition=(' . $command . ');')); if ($condition) { $authList[] = strtolower($rule['name']); } } else { //只要存在就记录 $authList[] = strtolower($rule['name']); } } if (!empty($rule['condition'])) { //根据condition进行验证

这里就可以明白getUserInfo 会去获取配置文件AUTH_USER对应表名 去查找用户信息

重点是:

?12 $command = preg_replace('/\{(\w*?)\}/', '$user[\'\\1\']', $rule['condition']); @(eval('$condition=(' . $command . ');'));

'/\{(\w*?)\}/ 可以看成要匹配的文字为 {字符串} 那么 {字符串} 会替换成$user['字符串']

$command =$user['字符串']

如果

?12345 $rule['condition'] = '{age}'; $command =$user['age'] $rule['condition'] = '{age} > 5'; $command =$user['age'] > 10 @(eval('$condition=(' . $command . ');'));

即:

?1 $condition=($user['age'] > 10);

这时再看下面代码 如果为真则加为授权列表

?123 if ($condition) { $authList[] = strtolower($rule['name']); }

关于php权限认证种类的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php权限认证种类 php权限设计的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did194760
更新时间:2023-04-26   阅读:22次

上一篇: phpaop事务 php开启事务

下一篇:csdnphp常用函数 php函数的类型分为

相关资讯

最新资料更新

  • 1.php短信被刷 php防止短信被刷
  • 2.php消息通知实例的简单介绍
  • 3.php闭包this php闭包函数使用场景
  • 4.php视频太大怎么传输 php上传视频压缩
  • 5.PHP外部引用样式 php引用外部文件
  • 6.php保存用户信息 php登录成功保存session
  • 7.zendphp环境包 win环境包
  • 8.php中文变量问号 php变量使用
  • 9.无限级菜单php java无限极菜单
  • 10.关于php用户同时登录的信息
  • 11.php的sql累加 sql实现累加
  • 12.PHP中嵌入script php嵌入html有哪几种方法
  • 13.php技术网学习 php技术门户
  • 14.php表示数组元素 php数组实现
  • 15.php获取网页乱码 php网页显示乱码
  • 16.imagephp缩放 缩放图像可以改变图像的分辨率吗
  • 17.韩顺平php视频教程下载 韩顺平oracle视频
  • 18.php防止ajax接口 php防止接口多次请求
  • 19.php变量获取图片 php调用图片
  • 20.php数值内存溢出 php大数组内存溢出

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]