Shiro权限模型以及权限分配的两种方式
1. 顶级账户分配权限
用户需要被分配相应的权限才可访问相应的资源。权限是对于资源的操作一张许可证。给用户分配资源权限需要将权限的相关信息保存到数据库。
这些相关内容包含:用户信息、权限管理、用户分配的权限信息(数据模型)
2. 权限模型设计
主体(user、password)
权限(权限名称、资源id)/资源(资源名称、访问url)
角色(角色名称)
角色和权限关系(角色id、权限id)
主体和角色关系(主体id、角色id)
3. 权限分配有两种
3.1 基于角色的权限控制
这些角色包含比如:总经理,技术总监,运营总监
不同的角色可以访问到的数据权限不同
例:
if (user.ifHasRole('总经理')) {
// 访问所有资源
}
if (user.ifHasRole('技术总监')) {
// 访问数据监控
// 访问服务器信息
}
if (user.ifHasRole('运营总监')) {
// 访问用户数据
// 访问报表数据
}
缺点:在经常变更角色权限的管理系统中无法做到动态管理,因为用户主体在整个系统中都是活动对象。
举个栗子:
技术总监需要查看用户数据,而用户数据只有运营总监才有权限看,那么此时需要修改代码了:
if (user.ifHasRole('技术总监') || user.ifHasRole('运营总监')) {
// 访问数据监控
// 访问服务器信息
}
所以说这样的方式不利于系统的扩展,即可扩展性太弱。
当然如果系统可以让人身兼多只,那么多选角色即可,这个用户同时有技术总监以及运营总监的身份。
但是如果涉及到HR总监甚至实施总监的功能,那么这个用户就同时有4个角色,这样真的好吗?
3.2 基于资源的权限控制
资源即功能,也就是当前系统所包含的所有功能模块,这些是不变的
比如button,link,menu等
此时访问这些资源需要permission来鉴权
例:
if (user.ifHasPermission('访问用户数据')) {
// 访问用户数据
}
if (user.ifHasPermission('访问报表数据')) {
// 访问报表数据
}
if (user.ifHasPermission('访问用户数据') || user.ifHasPermission('访问报表数据')) {
// 访问用户数据 和 报表数据
}
那么这样的话我们只有针对当前登录的用户,增加相应的资源权限即可,没有必要再去维护代码,减少了程序的代码维护。因为资源在整个系统中是静态对象。
*增减资源权限需要另开一个权限资源分配的模块,在这个模块中设置用户的资源权限即可,一般由顶级账户来操作。
Shiro权限模型以及权限分配的两种方式的更多相关文章
- Shiro系列(2) - 权限模型以及权限分配的两种方式
1. 顶级账户分配权限用户需要被分配相应的权限才可访问相应的资源.权限是对于资源的操作一张许可证.给用户分配资源权限需要将权限的相关信息保存到数据库.这些相关内容包含:用户信息.权限管理.用户分配的权 ...
- Spring Boot 整合 Shiro ,两种方式全总结!
在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...
- Linux进程分配内存的两种方式--brk() 和mmap()
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- TP实例化模型的两种方式 M() D()
TP框架中实例化模型的两种方式 #如果使用自己自定义的函数,那么就用D $mode=D('model'); #如果使用是系统自带的函数,那么就是用M $model=M('model');
- 进程分配内存的两种方式--brk() 和mmap()(不设计共享内存)(转)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- 通过属性 Cesium的FBO主要支持两种方式
角色其实就是一类权限的分组,所以给用户分配角色其实也是在给用户分配权限.在oracle中有三个比较常用的角色.对于一般不是很严格的系统可以授予开发用户CONNECT.RESOURCE角色权限即可. 其 ...
- nginx与php-fpm通信的两种方式
简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现. unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数 ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
随机推荐
- scala的多种集合的使用(8)之队列和栈的操作方法
1.使用队列 队列是一种那个先进先出的队列.1)创建一个队列. scala> import scala.collection.mutable.Queue import scala.collect ...
- 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!
一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...
- 一、操作m'y's'ql
一.创建framework框架的控制台默认不支持mysql
- Nginx从入门到实践(三)
动静分离 动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问. 动静分离的一种做法是将静态资源部署在nginx上, ...
- DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)
个人收藏 整体逻辑类似于 个人中心 ( 个人中心的相关逻辑梳理详情 点击这里 ) 也是两个序列化组价的分流 查看收藏 ( list ) 详情指向 收藏详情 的组价 创建收藏 ( create ) ...
- HDU 1757 A Simple Math Problem (矩阵快速幂)
题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...
- ab命令
ab -V -n在测试会话中所执行的请求个数.默认时,仅执行一个请求.请求的总数量 -c一次产生的请求个数.默认是一次一个.请求的用户量 -t测试所进行的最大秒数.其内部隐含值是-n 50000,它可 ...
- ubuntu18.04 使用管理员权限
最近在ubuntu系统安装koa脚手架koa-generator初始化项目,报错提示要使用管理员权限执行命令. 正常情况下使用 sudo su 命令即可进入管理员权限,使用 su [ 用户名 ] 退出 ...
- Python爬虫之三
1)使用Scrapy,什么叫做Scrapy Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据 ...
- hbuilder、hbuilderx和vscode对比
1. 从内存来对比 1.1 vscode占用内存 打开同一个项目,发现vscode占用内存比较多 1.2 HBuilder占用内存 1.3 HBuilderx占用内存 1.4 对比 从内存上来看,HB ...