权限设计(下) - 细说权限设计

什么是权限管理

一般来说,只要有用户参与的系统,那么都要有权限管理,尤其是一些后台的管理系统,

权限管理可以实现对用户访问系统的控制,按照安全规则或者相关策略的控制,可以使用户访问到只属于自己被授权的相关(比如菜单,或者页面资源)

权限管理包括用户认证和授权两模块

用户认证

用户认证,说白了就是登录的时候进行的验证,验证用户身份合法性。

最常见的用户身份验证的方式:

1、用户名 + 密码

2、手机号 + 验证码

3、证书验证

来看一下流程图:

用户授权

用户授权,浅白点讲就是权限访问控制,在用户认证通过后,系统对用户访问资源进行控制,用户具有资源的访问权限方可访问对于的资源

数据库模型

上篇文章中讲到了5张表,其实是由6张表而来,但是由于第六章表资源是可以整合的,所以可以避免冗余而采用了5张表,最简单的权限控制是至少由5张表来构成的

主体(账号、密码)

权限(权限名称、资源名称、资源访问地址)

角色(角色名称)

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

主体和角色关系(主体id、角色id)

分配权限

用户需要被分配到相应的权限才可访问相应的资源,这些权限信息需要保存

把用户信息、权限管理、用户分配的权限信息写到数据库(权限数据模型)

基于角色的访问控制

就是判断用户是否是项目经理还是普通员工,访问的资源就不同

比如

if (user.role = [pm]) {

// 访问

}

if (user.role != [pm]) {

// 访问

}

这么做没问题,但是不容易维护,一旦权限变更,那么就要变更代码

基于资源的访问控制

if (user have [pm]) {

// 访问

} else if (user have [boss]) {

// 访问

}

这么做只要针对user配置权限,把对应的资源给他,那么就能访问,不需要每次修改代码,增加了可维护性

基于url拦截的方式实现

举个栗子:使用springMVC拦截器实现

拦截对应url,url配置一个私有拦截list,拦截到的list必须进行验证,

进入拦截器验证后查看是否存在token信息,如果不存在,拦截返回到web登录页面,或者json错误信息给手机端

同时验证的时候针对资源,需要判断是否能够访问,可以第一次查询数据库的资源信息缓存到session或者redis中

使用权限管理框架实现

1、spring security (目前连spring自己都抛弃了这个框架,因为太重了,现在拥抱了Apache Shiro)

2、Shiro (to be continued...)

原文发布于微信公众号 - BeJavaGod(wxleechenxiang)

原文发表时间:2016-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

聊聊spark-submit的几个有用选项

15930
来自专栏Linux驱动

第4阶段——制作根文件系统 (4)

在上节制作busybox后(位于/work/nfs_root/mini_fs), 然后根据以下5个来构建最小根文件系统: (1)/dev/console(终端控...

254100
来自专栏性能与架构

Redis队列缓存应用示例

消息队列的一个典型应用就是通过异步处理方式,来解决某些场景下的高并发问题 例如日志的收集,特点是数据量大,并发压力大,不宜直接插入数据库,但实时性要求不高,所...

49270
来自专栏闵开慧

eclipse中执行程序显示找不到主类

eclipse中执行程序显示找不到主类 这种情况一般出现在工程中已编译有class文件的java文件,而后面新建的java则不会出现问题。这种情况说明工程bin...

37950
来自专栏逸鹏说道

CentOS 7 Root用户密码重置

跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 开机的时候按e (如果正在使用,你可以...

61560
来自专栏小车博客

OpenVZ 魔改 BBR - lkl-rinetd 一键脚本

29210
来自专栏大数据-Hadoop、Spark

Linux解决方案:No space left on device

45550
来自专栏linux运维学习

linux学习第四十三篇:LNMP架构介绍,mysql安装,php安装,Nginx介绍

LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx,并且php是作为一个独立服务存在的,这个服务叫做php-fpm,Nginx直接处理静态请求...

28960
来自专栏酷玩时刻

Redis4.0.1安装以及主从复制详解

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(...

11620
来自专栏张尧博客

Ubuntu软件常用升级命令

63660

扫码关注云+社区

领取腾讯云代金券