聊聊Web项目中的权限设计
一般的Web项目中都少不了登录这个环节,登录之后就需要跳转到首页,并且根据
当前用户的信息,获取到对应的菜单信息,可以操作的方法信息等等。这个只是针对于
操作权限,至于数据权限处理起来会更加复杂一些。自己从以往开发过的项目中,来聊
聊权限系统的设计思路。
软件开发中已经大量使用的,稳定的权限设计思路就是,给用户授予某个角色,然后
找到这个角色所拥有的权限,就是这个角色所对应的用户的权限。简单的几张表就可以
实现这个功能,用户表,角色表,权限资源表,用户角色表(一对多),角色权限表(多对多)。
使用这几张表就可以完成系统的权限设计,一个用户可以有多个角色,一个角色可以对应
多个资源。权限资源表中又可以分为多种权限资源,比如菜单资源,比如曾、删、改、查的
按钮资源。用户是否有权限查看某个菜单,用户是否有权限操作某个按钮对应的方法,都被
严格控制。权限已经控制到方法级别,粒度已经很小而且很实用。
介绍完上面的权限设计思路之后,在来聊一聊具体的实现方式。首先可以使用注解的方式
去给每一个方法添加操作权限比如说给A方法添加权限A。然后前端页面登录之后,拿到当前
用户对应的所有权限资源,对每一个菜单和每一个按钮都添加了对应的权限编码,用户登录
系统之后,有这个权限编码则显示某一个菜单或者是某个操作方法,没有就不显示。这在页面
中就已经过滤掉许多可能越权的操作,如果是碰到懂行的人,那就需要使用第二种方式来进行
鉴权操作。既然给某个用户授权可以登录某一个系统,那么首先用户信息肯定是存在于系统当
中的。如果系统中不存在当前操作的某个用户信息,那一定就是没有权限去做这个操作。后端
的处理方式为,使用一个AOP切面来进行统一处理,拦截所有controller方法中有权限注解的
方法。会先根据用户的唯一信息从缓存当中获取当前用户对应的所有权限,然后判断所有权限中
是否存在权限A,存在则放行。不存在则直接返回或者是抛出异常信息,中断程序的执行。
至此从权限设计到具体的实现思路都已经写明, 自己之前开发过的项目中很多系统都是使用
这种方式来设计的,简单实用。有其他建议的小伙伴欢迎留言讨论。
聊聊Web项目中的权限设计的更多相关文章
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- 转 web项目中的web.xml元素解析
转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45) 阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- 前后端分离Web项目中,RBAC实现的研究
在前后端分离Web项目中,RBAC实现的研究 最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- Web项目中使用Log4net 案例
简介: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题. 经验表明,日 ...
- 在web项目中使用shiro(认证、授权)
一.在web项目中实现认证 第一步,在web项目中导入shiro依赖的包 第二步,在web.xml中声明shiro拦截权限的过滤器 <filter> <filter-name> ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- Web 项目中分享到微博、QQ空间等分享功能
Web 项目中分享到微博.QQ空间等分享功能 网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接 ...
随机推荐
- Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本
项目地址: Pdfium.Net:https://github.com/1000374/Pdfium.Net PdfiumViewer:https://github.com/1000374/Pdfiu ...
- phpwind 缓存的问题
- MySQL 将执行结果保存到文件
1. 使用mysql的tee命令记录对mysql的操作过程 (1)第一种情况是在连接数据库的时候使用tee >mysql -u root -p --tee=C:/log.txt ...
- win10远程桌面连接,使用正确的用户名和密码仍然不能成功连接
最近笔记本重置后,台式使用"远程桌面连接"远程笔记本失败了,总是提示"登录没有成功". 开始自查:win10专业版,允许远程的相关设置也都开了,连接的ip正确, ...
- CF1433E Two Round Dances 题解
题目传送门 前置知识 圆排列 解法 \(\dfrac{Q_{n}^{\frac{n}{2}}Q_{\frac{n}{2}}^{\frac{n}{2}}}{A_{2}^{2}}\) 即为所求. 同时因为 ...
- 2023年多校联训NOIP层测试1
2023年多校联训NOIP层测试1 T1 luogu P6882 [COCI2016-2017#3] Imena \(50pts\) 赛场上被如何输入和判断是否合法薄纱了,赛后发现还有数字这一说,而且 ...
- WPF仿win10加载动画 可用于loading加载
直接上xaml 没有cs代码 (自己琢磨了好久感觉这样能接受) <UserControl x:Class="WpfApp1.Loading" xmlns="http ...
- Linux操作系统下查询NVMe盘符、Slot ID和Bus ID的对应关系
在拆卸NVMe PCIe 固态硬盘时,需要查询Linux操作系统下NVMe盘符.Slot ID和Bus ID的对应关系. 操作步骤打开操作系统命令终端.依次执行cd /sys/bus/pci/slot ...
- STC89C52驱动MAX7219LED点阵级联, 文字滚动效果
级联下的传值方式 级联下, N个MAX7219相当于组成了一个8*N bit宽度的锁存器, 如果需要对第M个7219进行写入, 需要做M次寻址+写入后拉高CS, 才能到达这个7219. 如果仅仅对这个 ...
- 【Unity3D】激光灯、碰撞特效
1 需求描述 本文将模拟激光灯(或碰撞)特效,详细需求如下: 从鼠标位置发射屏幕射线,检测是否与物体发生碰撞 当与物体发生碰撞时,在物体表面覆盖一层激光灯(或碰撞)特效 本文代码见→激光灯.碰 ...