MVC项目中用户权限的限制
MVC项目中用户权限的限制
开发工具与关键技术: MVC
作者:姚智颖
撰写时间:2020/08/16
注释:下面以机订票系统中角色维护功能为例,设置其中不同级别的用户在整个系统中一些功能的访问权限。
1.超级管理员的自定义,首先要保证系统中必须存在一个超级管理员的绝对权限,允许该管理员拥有整个系统的功能进行操作和修改,同时也要保证该管理员不能被其他用户修改,所以在系统中必须存在的那个超级管理员不能出现账户资料修改按钮。
在table 表格中返回修改单元中的屏蔽修改图标(页面上的屏蔽)。
权限过滤根据URL设置,一般URL是 : /区域名称/控制器名称/Action。浏览器拿到的字符串进行字符串分割,拿到区域名称、控制器名称、Action;在数据库中查找是否存在,把查找的结果在用户登录之后缓存到内存中再进行往后的查找。主页面主控制器一般放在权限过滤外面不会设置权限过滤,把区域放在里面。
2.新增角色与权限,用户权限的新增和修改,都是通过跳转其他页面的方式,权限功能不与其他功能一样使用模态框。
新增角色与权限的视图第一层就是设计了表格整体框架模块名称。
第二层是具体功能模块名称 – 对应的主要是控制器名称。
3.在勾选模块中添加通过构造函数,(JS new 构造函数,说明:构造函数也是种函数,但为了区分平常所用的函数,构造函数的函数名采用大骆驼峰写法(首字母大写)。
语法:var o = new ClassName()
原型:构造函数的prototype属性。)
设置一个类:ModuleID,添加了一个属性(moduleID)而且这个参数可传可不传。在C#中定义一个类是通过class关键字定义的,但是在JS中定义一个类就要通过方法定义。
定义一个[]数组遍历inputs,然后循环inputs.lehgth >0是否大于零,如果大于零就有勾选权限。
否则转到提示,提醒给改用户设置所需权限。
4.定义一个function方法,设置询问框,如果(msg.State)状态成功就提示操作成功,询问是否返回主页面,否则重新刷新页面。
5.在控制器中新增一个内部类,用于传递复杂对象的时候,可中页面中构建一个对象,把要传递的值放在对象里去,就可以传递复杂的数据或列表。
6.修改角色和权限,使用页面跳转的方法跳转到修改角色视图,修改角色页面布局和新增角色页面布局基本相同,只是修改要有把现有的权限去掉的功能,添加没有的权限,保持原有的权限不变3种。
在控制器中new一个匿名对象,使用JSON返回多个对象。
遍历:listpermission列表,进行for循环勾选模块信息。
用户角色ID作为修改的时候的主键,listModuleID是勾选的模块ID对象的数组(数据类型是 ModuleID对象的数组),
7.①需要新增的(数据库里面没有的) listModuleID中有,而oldModuleIDs中没有的
②需要删除的 listModuleID中没有,oldModuleIDs中有的
③保持不变的 listModuleID中有的,oldModuleIDs中也有的
比较保持不变的,新增的是new的部分减去交集部分,
删除的就是old减去交集部分,不变的就是交集部分。
7.删除角色,点击table表格中的删除按钮,删除该行数据。
判断是否有用户正在使用该账户,如果intUseUserCount等于零就删除,
执行删除,其中(removeList.Count + 1)是受影响行数和什么删除角色数据一样都是受影响行数。
8.应用权限模块,首先外连接所有的模块表,再连接读取用户拥有的模块表。
ID大于零就表示有该模块的权限,等于零表示没有该模块权限。
删除该用户没有的模块。
这种方法不安全,只是进行了页面的隐藏并没有在控制器中拦截权限,所以要用另外一种方法进行权限拦截。
在项目App_Start文件夹中添加一个类,
注册全局过滤器:
Static:修饰的方法是类的方法,不是实例方法,不需要对象的调用。
然后在项目的:Global.asax 里添加注册全局过滤器,过滤器原理:在控制器外面覆盖了一层代码(可以加N层),在没有过滤器的时候,浏览器是直接请求控制器中的方法,而加了过滤器之后,浏览器要想访问控制器中的方法必须要通过过滤器的信息比较才能访问,信息比较不正确该用户没有一部分的页面访问权限就重定向到没有权限的页面。
9.在项目里新建一个文件夹:Filter 然后新建一个类:PermissionFilter。
进行权限检查,首先获取用户所请求的是哪一个路径,
检查跳过登录前的一些不必要验证,比如验证码,
使用用户ID进行转换,如果能转换就继续向下进行权限检查,
如果转换失败,就执行到异常这里,Response(响应),就是把响应值重定向到登录页面。
其中有两种方法,第一种是需要在用户登录的时候只查询一次权限和相应的模块,获取在登录时查询的权限模块信息。但是存在一个问题就是,用户如果已经登录了,而管理员在用户登录后才修改该用户的权限,这时候该修改的权限不会生效。
第二种是每一次请求都查询一遍权限,第二种也存在问题,就是如果网站是大型网站数据复杂,而第二种方法是每操作一次就检查一次权限就会导致查询速度较慢,影响用户体验,当然第二种安全性较高。
MVC项目中用户权限的限制相关推荐
- spring mvc项目中利用freemarker生成自定义标签
2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法 这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常会引 ...
- 实用知识点梳理:网络操作系统、HTTPS、交换机中用户权限、路由器与集线器功能、HTTP2.0特性
网络操作系统 网络操作系统的基本任务: 屏蔽本地资源与网络资源之间的差异: 为用户提供基本的网络服务功能: 管理网络系统的共享资源: 提供网络系统的安全服务. HTTPS 在HTTP跟TCP中间多了一 ...
- oracle怎么赋予系统权限,讲解Oracle系统中用户权限的赋予和查看
在Oracle数据库系统中,用户权限分为两种(本文不涉及dba或oper的权限,只讲解普通用户的权限),分别是System Privilege系统权限和User Table Privilege用户数据 ...
- ajax调用fastreport,使用Ajax更新ASP.Net MVC项目中的报表对象
Ajax技术显著加快了Web应用程序的速度.另外,视觉效果方面也有提升.大家都同意,每次点击按钮时整个页面都会被刷新这一点不太友好.如果你的网速不是很快,那么这个过程会很烦人,因为所有的元素都会先消失 ...
- 交换机中用户权限级别
交换机中用户权限级别? LEVEL 0(访问级):可以执行用于网络诊断等功能的命令.包括ping.tracert.telnet等命令,执行该级别命令的结果 不能被保存到配置文件中. LEVEL 1(监 ...
- 在已有的Asp.net MVC项目中引入Taurus.MVC
Taurus.MVC是一个优秀的框架,如果要应用到已有的Asp.net MVC项目中,需要修改一下. 1.前提约定: 走Taurus.MVC必须指定后缀.如.api 2.原项目修改如下: web.co ...
- MVC项目中数据的分离
MVC项目中数据的分离 注释:下面以飞机电子客票系统中PNR查询功能为例,对未出票的PNR进行数据分离. 1.在进行旅客信息分离前要进行旅客PNR查询,查询该PNR中有多少个旅客,因为前面已经查询出了 ...
- 谈谈MVC项目中的缓存功能设计的相关问题
今天这一篇文章我来谈一谈在MVC 3项目中的缓存功能,以及针对缓存的一些设计上的考量,给大家参考参考 前言 为什么需要讨论缓存?缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源 ...
最新文章
- π型滤波频率计算_滤波电路的总结
- 计数时钟和滚动汉字显示c语言程序,MSP430F449单片机RTC时钟C语言程序(带闹钟)...
- mysql 将时间戳直接转换成日期时间,mysql查询某一天的数据。
- python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
- Python20行代码实现视频字符化
- mysql模式匹配用什么关键字_MYSQL模式匹配:REGEXP和like用法
- php 反射 视频教程,php 实现反射
- Foxmail新建自动标签功能在哪 如何给Foxmail收件人邮件设置自动标签
- Js 对象添加属性
- 关于Mac下mysql8.0的启动
- 李宏毅机器学习day2
- NSData的同步下载与NSConnection的同步下载
- 适合计算机类研究生参加的比赛
- Android 导出应用的数据库的两种常用方法,db查看器 SQLite Expert Personal下载
- 用svn上的文件,覆盖本地文件
- 超详细电脑安装win10专业版
- 初见Laravel框架
- Github之First day on Github,带你学习并完成任务点,纯手敲超详细教程!(下)
- win7 搜索文件内容
- Java修行——DAY12