文档章节

权限管理

龙之天空
 龙之天空
发布于 2015/11/09 14:02
字数 1595
阅读 84
收藏 0

1权限管理

1.1什么是权限管理

     基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或则安全策略控制用户可以访问而且只能访问被授权的资源。

    权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过之后用户具有该资源的访问权限方可访问

1.2 用户名密码身份认证和授权流程:

             

 

1.3 权限模型

    主体:账号,密码

    资源:资源名称、访问地址

    权限:权限名称、资源id

    角色:角色名称

    角色和权限关系(角色id、权限id

    主体和角色关系(主体id,角色id

 

但是通常情况下,我们都会把资源和权限表合并成为一张权限表

 

1.4访问控制的两种方式

1.4.1 基于角色的访问控制

     基于角色的访问控制是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运行报表,查询员工工资信息等,访问控制流程如下:

上图翻译成代码:

if(主体.hasRole("总经理角色id")){

              //查询员工工资信息

}

 

缺点:以角色进行访问控制粒度教粗,如果上图查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑,可扩展性差

修改代码如下:

if(主体.hasRole("总经理id") || 主体.hasRole("部门经理id")){

 //查询员工工资信息

}

 

所以不推荐采用此方法进行权限管理

1.4.2 基于资源的访问控制

    基于资源的访问控制是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才能查询员工工资信息。

     if(主体.hasPermission("查询工资权限id")){

              //查询员工工资信息

     }

 

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也只需要将“查询员工工资信息权限”添加到“部门经理角色”的权限列表中,判断逻辑不用变,系统可扩展性强。

 

 

推荐使用此方法进行权限访问控制。

 

1.5 权限管理的粗颗粒度和细颗粒度

              粗颗粒度控制在页面,类,方法,按钮。可以使用框架系别同意进行管理

        细颗粒度控制在具体的业务流程,比如001用户查询,创建写在每个业务逻辑模块中。比如:对u01用户分配商品修改权限,u01用户只能对商品进行修改。

 

1.6 基于url拦截

              基于url拦截,实现思路是:将系统操作的每个url配置在权限表中,将权限对应到角色,将角色分配到用户,用户访问系统功能通过filter进行过滤,过滤器获取到用户访问的url,只要访问的url是用户分配角色中的url则进行访问

sql-table:

/*

SQLyog v10.2

MySQL - 5.1.72-community : Database - shiro

*********************************************************************

*/

/*!40101 SET NAMES utf8 */;

 

/*!40101 SET SQL_MODE=''*/;

 

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

/*Table structure for table `sys_permission` */

 

CREATE TABLE `sys_permission` (

  `id` bigint(20) NOT NULL COMMENT '主键',

  `name` varchar(128) NOT NULL COMMENT '资源名称',

  `type` varchar(32) NOT NULL COMMENT '资源类型:menu,button,',

  `url` varchar(128) DEFAULT NULL COMMENT '访问url地址',

  `percode` varchar(128) DEFAULT NULL COMMENT '权限代码字符串',

  `parentid` bigint(20) DEFAULT NULL COMMENT '父结点id',

  `parentids` varchar(128) DEFAULT NULL COMMENT '父结点id列表串',

  `sortstring` varchar(128) DEFAULT NULL COMMENT '排序号',

  `available` char(1) DEFAULT NULL COMMENT '是否可用,1可用,0不可用',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*Table structure for table `sys_role` */

 

CREATE TABLE `sys_role` (

  `id` varchar(36) NOT NULL,

  `name` varchar(128) NOT NULL,

  `available` char(1) DEFAULT NULL COMMENT '是否可用,1可用,0不可用',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*Table structure for table `sys_role_permission` */

 

CREATE TABLE `sys_role_permission` (

  `id` varchar(36) NOT NULL,

  `sys_role_id` varchar(32) NOT NULL COMMENT '角色id',

  `sys_permission_id` varchar(32) NOT NULL COMMENT '权限id',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*Table structure for table `sys_user` */

 

CREATE TABLE `sys_user` (

  `id` varchar(36) NOT NULL COMMENT '主键',

  `usercode` varchar(32) NOT NULL COMMENT '账号',

  `username` varchar(64) NOT NULL COMMENT '姓名',

  `password` varchar(32) NOT NULL COMMENT '密码',

  `salt` varchar(64) DEFAULT NULL COMMENT '',

  `locked` char(1) DEFAULT NULL COMMENT '账号是否锁定,1:锁定,0未锁定',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*Table structure for table `sys_user_role` */

 

CREATE TABLE `sys_user_role` (

  `id` varchar(36) NOT NULL,

  `sys_user_id` varchar(32) NOT NULL,

  `sys_role_id` varchar(32) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

 

/*
SQLyog v10.2
MySQL - 5.1.72-community : Database - shiro
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*Data for the table `sys_permission` */

insert  into `sys_permission`(`id`,`name`,`type`,`url`,`percode`,`parentid`,`parentids`,`sortstring`,`available`) values (1,'权限','','',NULL,0,'0/','0','1'),(11,'商品管理','menu','/item/queryItem.action',NULL,1,'0/1/','1.','1'),(12,'商品新增','permission','/item/add.action','item:create',11,'0/1/11/','','1'),(13,'商品修改','permission','/item/editItem.action','item:update',11,'0/1/11/','','1'),(14,'商品删除','permission','','item:delete',11,'0/1/11/','','1'),(15,'商品查询','permission','/item/queryItem.action','item:query',11,'0/1/15/',NULL,'1'),(21,'用户管理','menu','/user/query.action','user:query',1,'0/1/','2.','1'),(22,'用户新增','permission','','user:create',21,'0/1/21/','','1'),(23,'用户修改','permission','','user:update',21,'0/1/21/','','1'),(24,'用户删除','permission','','user:delete',21,'0/1/21/','','1');

/*Data for the table `sys_role` */

insert  into `sys_role`(`id`,`name`,`available`) values ('ebc8a441-c6f9-11e4-b137-0adc305c3f28','商品管理员','1'),('ebc9d647-c6f9-11e4-b137-0adc305c3f28','用户管理员','1');

/*Data for the table `sys_role_permission` */

insert  into `sys_role_permission`(`id`,`sys_role_id`,`sys_permission_id`) values ('ebc8a441-c6f9-11e4-b137-0adc305c3f21','ebc8a441-c6f9-11e4-b137-0adc305c','12'),('ebc8a441-c6f9-11e4-b137-0adc305c3f22','ebc8a441-c6f9-11e4-b137-0adc305c','11'),('ebc8a441-c6f9-11e4-b137-0adc305c3f24','ebc9d647-c6f9-11e4-b137-0adc305c','21'),('ebc8a441-c6f9-11e4-b137-0adc305c3f25','ebc8a441-c6f9-11e4-b137-0adc305c','15'),('ebc9d647-c6f9-11e4-b137-0adc305c3f23','ebc9d647-c6f9-11e4-b137-0adc305c','22'),('ebc9d647-c6f9-11e4-b137-0adc305c3f26','ebc8a441-c6f9-11e4-b137-0adc305c','13');

/*Data for the table `sys_user` */

insert  into `sys_user`(`id`,`usercode`,`username`,`password`,`salt`,`locked`) values ('lisi','lisi','李四','bf07fd8bbc73b6f70b8319f2ebb87483','uiwueylm','0'),('zhangsan','zhangsan','张三','cb571f7bd7a6f73ab004a70322b963d5','eteokues','0');

/*Data for the table `sys_user_role` */

insert  into `sys_user_role`(`id`,`sys_user_id`,`sys_role_id`) values ('ebc8a441-c6f9-11e4-b137-0adc305c3f28','zhangsan','ebc8a441-c6f9-11e4-b137-0adc305c'),('ebc9d647-c6f9-11e4-b137-0adc305c3f28','lisi','ebc9d647-c6f9-11e4-b137-0adc305c');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;



© 著作权归作者所有

上一篇: springmvc 基础
下一篇: 类装载器
龙之天空
粉丝 7
博文 79
码字总数 18140
作品 0
宁波
私信 提问
权限管理设计、分析、实现参考资料

AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据不同用户权限有不可见、可见、编辑 三种操作权限 http://com...

springfe
2006/11/13
0
0
权限管理功能模块设计

1.权限系统数库表结构 a.权限字典表(标记权限所属系统?,删除动作需要判断是否被使用) b.功能菜单表(标记功能菜单所属系统) c.菜单权限组表 d.用户信息表(标记用户所属系统,一个用户可...

飓风2000
2014/12/04
9
0
Confluence 6 管理和恢复空间管理权限

管理和恢复空间管理权限 可能有些空间的空间管理权限被系统的超级管理删除掉了。这样的空间是没有任何空间管理员的,用户和用户组都不能对空间进行管理。只有 Confluence 管理员权限的用户可...

honeymose
2018/12/04
1
0
基于角色的权限控制

AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据不同用户权限有不可见、可见、编辑 三种操作权限 http://com...

tinwai
2010/03/26
0
0
MySQL用户和权限管理

1、创建数据库用户 MySQL安装好了以后,使用root用户登录MySQL,我们使用create user方法创建用户,如下: 创建了一个用户名为neiwang,密码为1234qwer的用户,他只能在ip为172.17.22.*的网段...

梅超疯
2016/03/07
208
0

没有更多内容

加载失败,请刷新页面

加载更多

链表中环的入口节点

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路: public ListNode EntryNodeOfLoop(ListNode pHead) { if (pHead == null || pHead.next == null) ...

Garphy
9分钟前
2
0
Spring5 源码分析-容器刷新-invokeBeanFactoryPostProcessors()方法

上一篇:Spring5 源码分析-容器刷新-prepareBeanFactory()方法 该方法主要完成以下功能: 1.实例化ConfigurationClassPostProcessor,并调用ConfigurationClassPostProcessor.postProcessBe...

特拉仔
10分钟前
3
0
为什么MySQL用B+树做索引

索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。...

小致Daddy
35分钟前
4
0
网站前台的三级联动数据封装

我在进行项目时候遇到了一个进行数据封装的一个功能,进行数据的封装的功能也挺复杂,来回试了好几十种方法.最后使用的是这种方法. 使用一个pojo进行封装两个数据,一个是list一个是实体类. 具体...

小天丶羽
37分钟前
4
0
创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA的SPI FLASH、硬件加密芯片

TL437xF-EVM是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA设计的开发板,底板采用沉金无铅工艺的4层板设计,尺寸为240mm*130mm,它为用户提供了SOM-TL437xF核心板的测...

Tronlong创龙
40分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部