ThinkPHP项目笔记之RBAC(权限)基础篇

今天,总结一下,RBAC(基于角色的访问控制),直白一点,就是权限管理。说到这,不得不“小叙”一下,我第一次

开发权限管理功能的“插曲”。第一次做这个,真的不会,我只知道“有点印象”,当时任务落到我的身上,主管也是说个

大概,至于“大概”是什么,基本可以忽略不计,没法,没有参考,只有到处找资料,翻资料,后来还是我在网上找到了

相关的视频,(说到技术视频,我不得不说,就算下载很多的视频,别人就算讲的再好,不一定挪到你那里就好使,

就好比,说与做是两码事一样,别人讲视频其实是加深别人对知识点的理解,跟咋们听众盆友冒油半毛钱的关系,唯有

下功夫,反复敲打键盘,做到熟练,至于生巧,那又是另一重境界。),呵呵呵,我是幸运的,按照视频的讲解,基本上,

“copy”过来,还算顺利,当然,中间也有一点“坑”,最后还是趟过了。

说到RBAC,不得不说的五个表:用户表(user),用户角色表(role_user),角色表(role),节点表(node),权限表(access)

其中的关系是, 从这个图表中,我们不难看出它们之间的联系。

用户角色表是用户表与角色表产生交集的关联表,权限表也称节点角色表,它是角色表与节点表关联的表。

好的,先认识一下这些表的表结构:

/*
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `think_access` (
  `role_id` smallint(6) unsigned NOT NULL,
  `node_id` smallint(6) unsigned NOT NULL,
  `level` tinyint(1) NOT NULL,
  `module` varchar(50) DEFAULT NULL,
  KEY `groupId` (`role_id`),
  KEY `nodeId` (`node_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `think_node` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `title` varchar(50) DEFAULT NULL,
  `status` tinyint(1) DEFAULT ‘0‘,
  `remark` varchar(255) DEFAULT NULL,
  `sort` smallint(6) unsigned DEFAULT NULL,
  `pid` smallint(6) unsigned NOT NULL,
  `level` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `level` (`level`),
  KEY `pid` (`pid`),
  KEY `status` (`status`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `think_role` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `pid` smallint(6) DEFAULT NULL,
  `status` tinyint(1) unsigned DEFAULT NULL,
  `remark` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`),
  KEY `status` (`status`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

CREATE TABLE IF NOT EXISTS `think_role_user` (
  `role_id` mediumint(9) unsigned DEFAULT NULL,
  `user_id` char(32) DEFAULT NULL,
  KEY `group_id` (`role_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
*/

时间: 2024-10-26 00:07:34

ThinkPHP项目笔记之RBAC(权限)基础篇的相关文章

ThinkPHP项目笔记之RBAC(权限)补充篇

这里,主要补充的是配置以及相关代码问题. <?php return array( //'配置项'=>'配置值' 'RBAC_SUPERADMIN' => 'admin',//超级管理员名称,对应用户表中某一个用户:username 'ADMIN_AUTH_KEY' => 'superadmin',//超级管理员识别 'USER_AUTH_ON' => true, //是否需要认证 'USER_AUTH_TYPE' => 1, //认证类型 1-登陆后认证,2-实时认证

ThinkPHP项目笔记之RBAC(权限)上篇

当理清这5个表的关系,接下来,就是功能介绍了. 基本会按照这个思路,作为介绍. a.添加角色 几点注意: 1.角色名称,即对应工作中的职称,如程序员,架构师等,每个职称会有对应的权限,同理,不同的角色有不同的对应权限. 2.角色描述,(不要想当然是对该角色的某某描述,a,是干嘛的,b是干嘛的,c又是干嘛的..),这个角色描述 很重要,不要“断章取义”.它就是权限分配的关键点,(这是我在项目中琢磨出来的). 3.是否开启,有关闭和启动2项,即对该角色的限制.简单的将,开启,意味着该角色“work”

ThinkPHP项目笔记之RBAC(权限)下篇

接着谈谈:添加用户以及用户管理列表 e.添加用户 用户名:一般做一些长度,字符的限制,以及判断该用户是否存在等 密码:严格的将,密码要设置较复杂,但要不易忘记最好. 所属用户组:就是所有的角色的集合,包括超级管理员,管理员等等 f.用户管理列表 即所有添加的用户的集合.

MongoDB 学习笔记(一)基础篇

1.MongoDB 特点 面向集合存储,存储对象类型的数据方便 模式自由,不需要定义任何模式(schma) 动态查询 完全索引,包含内部对象 复制和故障恢复方便 高效的二进制数据存储 支持c# 平台驱动 2.体系结构 一台服务器可以创建多个Server 实例和数据库,(推荐一天server 机器创建一个实例), 数据库:MongoDB 中的一系列与磁盘有关的物理文件(数据文件,日志文件等). 数据逻辑结构:文档 (documnet) 集合(collection) 数据库(database). d

ThinkPHP项目笔记之MVC篇

题记:网上关于ThinkPHP的介绍,不计其数,有文档,示例,代码片段以及其他等.毕竟自己掌握的,才是自己的. 所以,趁着做的项目(当然用的是thinkphp框架)的余热,奋笔疾书,一个人的理解与拙笔记录下来,说不定以后 还会遇到类似的问题,这也相当于一笔宝贵的技术经验. 好了,废话少说,该进正文了. 谈框架,当然少不了MVC,对MVC的理解. M:module,模型,也就是描述数据的功能,最常用调用数据库,增,删,改,查,数据等. V:view ,模板,也称视图,就是页面展示.如:网上我们看到

ThinkPHP项目笔记之模板篇

顾名思义:模板就是网页页面,有的是静态,有的的动态 基本语法: 1. <li><a href="{:U('User/searchlist')}">返回列表</a></li> 2. <form method="post" autocomplete="off" action="{:U('user/up')}"> ....</form> 3. <input

ThinkPHP项目笔记之登录,注册,安全退出篇

1.先说注册 a.准备好注册页面,register.html,当然一般有,姓名,邮箱,地址等常用的. b."不要相信用户提交的一切数据",安全,安全是第一位的.所以要做判断,客户端要做基本判断,为了防止 别人恶意的行为,对服务端的逻辑代码作判断也是必要的.双层保险. c.当然,客户注册的信息是要进数据库,如何科学的建立数据库,也是很有必要研究的 2.登录 a.准备好登录页面,login.html b.即便客户已经注册完毕,对登录信息进行判断,过滤,验证也是必要的,一切为了安全 3.安全

ThinkPHP项目笔记之函数篇

说到函数,可能有人会想:框架的C(控制器)通牌都是函数构成的,没有必要讲吧. 当然,我要说的是,公共函数:function.php,该文件就是为了开发一下功能准备的,比方说,某个功能,a地方可用,b地方 可用,到c地方亦可以.在这个文件开发具有共性的功能,可以提高代码的使用率,以及避免代码出现冗余.放在模块里它可以 使用,放到模板里亦号管用. 如: <?php function getUserInfo($id){ if ($id > 0){ $uInfo = M('数据表名')->whe

ThinkPHP项目笔记之控制器常用语法

如,有数据表:tmp,以下以此为例. $a = M('Tmp'); $a -> select(); $a -> where(condition)->select(); $a -> where(condition)->limit(n)->order(condition2)->select(); $a -> field(condition)->select(); $a -> find();###类似select.只不过它取一条数据而已. $this-