Thinkphp中的RBAC使用详解
来源:互联网 发布:js 数组对象合并 编辑:程序博客网 时间:2024/05/18 02:29
1.什么是RBAC:
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。
2.Thinkphp中的RBAC:
首先是RBAC用到的五张表(其中rbac是表的前缀,可在配置文件database.php中配置):
rbac_user(用户表):
CREATE TABLE IF NOT EXISTS `rbac_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `email` varchar(30) NOT NULL, `is_admin` tinyint(1) NOT NULL DEFAULT '0', `status` tinyint(1) NOT NULL DEFAULT '1', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `password` varchar(50) NOT NULL, `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=113 ;
rbac_role(角色表)
CREATE TABLE IF NOT EXISTS `rbac_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '1', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;rbac_access(权限表,存放的是页面的url):
CREATE TABLE IF NOT EXISTS `rbac_access` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL , `urls` varchar(1000) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '1', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
rbac_userrole(用户角色表,存放用户和角色的关系表):
CREATE TABLE IF NOT EXISTS `rbac_userrole` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` int(11) NOT NULL, `role_id` char(20) NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;
rbac_roleaccess(角色权限表,存放的角色和权限之间的关系表):
CREATE TABLE IF NOT EXISTS `rbac_roleaccess` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_id` int(11) NOT NULL, `access_id` char(30) NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
实现的功能:
4.实现RBAC是的几个方法:
array_column() 返回输入数组中某个单一列的值。用于取出角色表中或其他表中的某一列的值用这个函数比较方便。
in_array() 函数搜索数组中是否存在指定的值。在编辑用户的角色的页面展示用户属于的角色时,可以用这个函数判断出用户所属角色的id,展示到页面。如下:
{if condition=" in_array($vo['id'],$role_id)"} checked {/if}
$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] //用于获取用户访问当前页面的url
array_diff()比较两个数组的键值,并返回差集,array_intersect()比较两个数组的键值,并返回交集
总结:RBAC具体的流程是:根据用户登陆的信息判断用户是否有访问该页面的权限,如果没有权限可以通过超级管理员设置,过程是:先添加一个权限(页面的url),然后给角色分配权限,最后给用户分配角色的流程。
具体实现的代码可以参考慕课网的视屏:http://www.imooc.com/video/14133
- Thinkphp中的RBAC使用详解
- thinkPHP中关于RBAC使用详解
- ThinkPHP中关于RBAC使用详解
- thinkphp RBAC 详解
- thinkphp RBAC 详解
- 分享:thinkphp RBAC 详解
- 分享:thinkphp RBAC 详解
- THINKPHP RBAC 使用感想
- ThinkPHP 的RBAC使用
- ThinkPHP中RBAC数据库详解
- ThinkPHP中RBAC数据库详解
- ThinkPHP中RBAC数据库详解
- ThinkPHP中RBAC数据库详解
- ThinkPHP中RBAC数据库详解
- thinkphp rbac
- ThinkPHP-RBAC
- ThinkPHP-RBAC
- ThinkPHP RBAC
- CSRF攻击与防御
- python正则表达式
- ECMAScript6的新特性总结
- angularJS路由详解
- Swift的一些高级技巧
- Thinkphp中的RBAC使用详解
- GC调优简介
- SQL相关知识
- Python起步之面向对象初步应用(烤地瓜)
- 关于 栈 和 堆
- Go基础编程:流程控制
- 介绍一些编程语言。
- LeetCode 15 3Sum
- 企业人力资源管理系统(SSH)