ThinkPHP---RBAC

一、什么是RBAC

基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。

在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。

在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。

二、ThinkPHP中的RBAC

先看下官方给的实例所用到的数据表,通过5张表实现权限控制,定义如下:

RBAC 要用到5个数据表

think_user (用户表)

think_role (用户分组表)

think_node (操作节点)

think_role_user (用户和用户分组的对应)

think_access (各个操作和用户组的对应)

用户表

角色表,有哪些角色,该角色与对应的userid用户相关联

根据用户表的id给出对应的角色id相关联,也就是给用户分配角色,比如userid为3的角色为2,根据role角色表,7代表员工的角色

access表,权限表,比如角色id为2,也就是员工的权限,可以的对应的结点

结点表,代表有哪些应用-模块-模块方法,并且定义了之间的一种关系,比如noteid为30的是Public模块,noteid为31,32,33,34的方法add,insert,edit,update都属于Public。noteid为85的test方法,属于noteid为84的Game模块下的方法。


字段name就是当项目,模块或者操作的名称了。

字段PID 记录他们的从属关系,比如某一个模块是属于哪个项目,某个操作属于哪个模块。

字段level 表示该节点的层级 换句话就是说 level=1 为项目 ,level=2为模块 ,level=3就是操作了,比如说 admin项目,他的PID 就是 0 (项目的PID都是0) level就是1,nane就是admin了,admin项目下面有的user模块,它的level就应该是2,pid就是admin的id, admin下面user模块的add操作,level就该是3了,pid就应该是前面的user对应的ID.

三、config配置文件详解

我们看看thinkphp官方示例中的config文件:

 

 

大家看注释就应该懂大半了,其中Public模块是无需认证的,道理很简单,没登录之前大家都是游客身份,如果登录页面也要权限,那从哪里登录呢?是吧,呵呵。默认网关地址就是认证失败,没有权限跳转到此处,重新登陆。ADMIN_AUTH_KEY表示超级管理员权限,如果你在user表建立一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什么权限都有,为什么要设置一个这样的管理员,因为当你把权限分配错了容易引起系统权限混乱,搞得大家都访问不了,这时候超级管理员就来了。

四、RBAC类的几个重要的方法

authenticate($map,$model=”)方法 传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息

saveAccessList($authId=null)方法 传入用户的ID 此方法不返回值,只是设置 $_SESSION[‘_ACCESS_LIST’]的值,其中包含了所有该用户对应的用户组的有权限操作的所有节点 $_SESSION[‘_ACCESS_LIST’][‘项目名’][‘模块名’][‘操作名’],以后判断权限就是判断当前项目,模块和操作是否在 $_SESSION[‘_ACCESS_LIST’]中能找到。s

checkAccess() 方法 检测当前模块和操作是否需要验证 返回bool类型

checkLogin()方法 检测登录

AccessDecision($appName=APP_NAME) 方法 就是检测当前项目模块操作 是否在$_SESSION[‘_ACCESS_LIST’]数组中,也就是说 在 $_SESSION[‘_ACCESS_LIST’] 数组中$_SESSION[‘_ACCESS_LIST’][‘当前操作’][‘当前模块’][‘当前操作’]是否存在。如果存在表示有权限 否则返回flase。

getAccessList($authId) 方法 通过查询数据库 返回权限列表 $_SESSION[‘_ACCESS_LIST’]的值了。

转载于:https://www.cnblogs.com/freestyle-le/p/4518797.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c mysql bulk,MySqlBulkLoader批量上传遇到的问题和解决方法

最近用 MySqlBulkLoader 向MySql数据库批量上传数据遇到了些问题,做下记录问题1:如图原因:版本不合,使用的MySql版本和引用的mysql.data 版本不和解决方案:用nuget将mysql.data升级到对应版本,如果是MySql8…

验证必须是数字php,Element 中表单非必填数据项 必须为数字的验证问题

Element-ui 的el-form组建中,自带基本的验证功能,比如某些项必填的验证,直接加入rules 规则中即可,如下实例:在页面中书写如下:在vue 初始化data中filterForm: {firstDay: ,lastDay: },rules: {firstDay: […

为开发者准备的9个实用PHP代码片段(转)

[导读] 当你开发网站、app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力。这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发。 本文由PHP100中文网编译,转载请看文末的转载要求&…

idea 自动生产序列吗,IDEA自动生成序列化Id

实体对象实现了java.io.Serializable接口后,一般都会提供一个serialVersionUID以做版本区分。在idea里,可以通过设置来快速生成serialVersionUID。设置方法1、打开Preferences–>Editor–>Inspections,然后在右侧输入UID进行搜索(搜索方…

ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法

Ionic中[弹出式窗口]有两种(如下图所示),$ionicModal和$ionicPopup; $ionicModal是完整的页面; $ionicPopup是(Dialog)对话框样式的,直接用JavaScript设定对话框的一些参数,通常用于通知消息、确认等作用&a…

php实现购物车 redis,redis 哈希数据类型简单操作(实现购物车案例)

这里不累赘如何安装redis和php redis扩展,主要熟悉调用redis哈希数据类型如图简单方法操作如下1:hSet2:hGet4:hDel5:hGetAll4:hExists5:hIncrBy简单购物车实现namespaceHome\Controller;useThink\Controller;useOrg\Net\Http;useThink\Cache\Driver\Red…

php scsi平台,三大SCSI Target平台PK:让服务器化身SAN

就服务器而言,从虚拟化平台到数据库应用的许多功能,都需要有SAN存储设备的支持,但是对于模拟测试、教学之类的应用来说,受到成本限制采购SAN存储设备便有所困难。特别是企业,都不会仅仅为了测试等常态使用的用途&#…

[BZOJ 1012] [JSOI 2008] 最大数maxnumber

1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5094 Solved: 2276[Submit][Status][Discuss]Description 现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当…

php 数组元素往后移动,php 二维数组 元素移动

[已关闭问题]关闭于 2014-11-20 16:02二维数组元素如何实现,满足一定的条件,跳到下下个元素,不满足的话,顺序执行呢?比如:header("Content-type:text/html;charsetutf-8");$arr array(array(id&…

帝国cms仿php自媒体新闻系统,帝国CMS仿《砍柴网》源码 专栏自媒体投稿资讯文章新闻网站模板...

在开发妹入手了一套模版,测试效果真心不错这里发出来供大家参考研究源码简介一家拥有全球视野的前沿科技媒体,我们始终秉承观点独到、全面深入、有料有趣的宗旨,在科技与人文之间寻找商业新价值,坚持以人文的视角解读科技&#xf…

【Win10】UAP/UWP/通用 开发之 x:Bind

【Win10】UAP/UWP/通用 开发之 x:Bind [Some information relates to pre-released product which may be substantially modified before its commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.] […

SRS文档

负责人:韩朝燕 1什么是用例? 在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification)。传统的软件需求规约基本上采用的是功能分解的方式来描述系统功能,在这种表…

linux重启网卡的命令行,linux系统重启网卡命令

关于win10系统开机总是要禁用重启网卡才能联网如何解决就为大家介绍到这边了,有遇到同样情况的用户们可以采取上面的方法步骤来解决。问题2已知win7下不需要删除qos协议,在跑无盘模式下以前最好不要安装厂商网卡驱动或修改win7网络协议种类,某…

JS判断客户端是否是iOS或者Android

<script type"text/javascript"> var u navigator.userAgent, app navigator.appVersion; var isAndroid u.indexOf(Android) > -1 || u.indexOf(Linux) > -1; //android终端或者uc浏览器 var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); //i…

linux nginx 缓存服务器,如何开启Nginx缓存

众所周知&#xff0c;Nginx是一个高性能的web服务器&#xff0c;尤其在高并发和处理静态页面的时候有先天的优势&#xff1b;很大一部分得益于缓存的开启&#xff0c;那么如何开启nginx的缓存呢。简单来说可以分两步&#xff1a;1.定义缓存存储目录并指定共享内存空间2.在locat…

linux 安装u盘软件,Universal USB Installer:帮你用U盘装Linux

近期&#xff0c;Linux系统U盘制作安装工具&#xff1a;Universal USB Installer迎来了v1.9.5.1版本&#xff0c;新版支持了OpenSuse 32/64bit系统平台&#xff0c;欢迎Linux桌面爱好者下载使用。Universal USB Installer工具&#xff0c;类似一款U盘制作工具&#xff0c;允许用…

lucene 高亮显示

原文地址&#xff1a; http://blog.csdn.net/javaman_chen/article/details/8224407 Lucene针对高亮显示功能提供了两种实现方式,分别是Highlighter和FastVectorHighlighter。 顾名思义&#xff0c;FastVectorHighlighter较Highlighter速度更快&#xff0c;功能也更强大&…

u盘 轻量linux,3种方法来创建轻量、持久化的Xubuntu Linux USB系统盘

使用Universal USB Install创建持久化USB XUbuntu系统盘这个教程为你介绍如何使用Xubuntu Linux创建一个轻量并且持久化的Linux USB系统盘。译者注&#xff1a;持久化Linux USB系统盘(Persistent Linux USB drive)&#xff0c;安装在优盘的Linux系统&#xff0c;允许用户保存数…

linux u盘加载阵列卡驱动步骤,Linux U盘加载阵列卡驱动步骤

如果没有Linux的机器,可以使用安装光盘的Linux环境&#xff1a;将 U 盘完全慢速格式化&#xff0c;将驱动拷贝到U盘&#xff0c;将U盘插在服务器上&#xff0c;用Linux安装光盘第一张启动到图形安装界面&#xff0c;按Ctrl&#xff0b;Alt&#xff0b;F2切换到控制台。按F11调用…

linux 笔记本键盘灯驱动程序,安装和使用CKB Next在Linux上更改Corsair键盘背光设置...

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE系统下安装和使用CKB Next的方法&#xff0c;以在Linux系统上更改Corsair键盘背光设置。Corsair键盘非常适合在PC上进行游戏&#xff0c;特别是在夜间&#xff0c;因为它们具有出色的RGB背光功能&#xff0c;用户可以轻…