权限设置理解:权限设置是对用户的分级管理,比如一个系统有超级管理员、管理员、普通用户,超级管理员可以操作整个系统,而管理员和普通用户只能操作部分页面,因此一个系统就要设置权限来限制
设置权限的原理:通过筛选链接来控制用户操作的权限
Action过滤器
ActionFilterAttribute类是C# ASP.net MVC中的过滤类
ActionFilterAttribute类是被abstract 修饰符修饰,表示该类只能是基类,也就是只能被继承。
ActionFilterAttribute类中只有一个无参数的构造函数和四个被protected 修饰符修饰,表示该方法只限于本类和子类访问,实例不能访问。
权限设置的步骤:
① 先在项目里添加一个全局过滤器,在里面添加自定义过滤器的方法
② 然后在项目里创建一个新的文件夹封装一个类来访放自定义的过滤器的代码
③ 在路由里面注册这个全局过滤器,完成权限设置
在项目创建新的文件夹中添加全局过滤器FilterConfig
然后在全局过滤器FilterConfig里添加一个方法PermissionFilter
在项目再创建一个文件夹封装一个类来写PermissionFilter方法
接着在封装的类里面写设置权限的代码,而值得注意的是这里的权限设置必须是执行Action先执行权限的方法
在调用操作方法前调用。
获取请求的URL(获取 URI 的绝对路径。)
检查是否登录
注意:验证URL的时候跳过登录验证(url == “/” ,url == “/Main/Login” , url == “/Main/UserLogin”),图片验证(url == “/Main/CreateValidCode”)
获取登录人ID
获取登录人的ID后,接下来时查询当前用户所能操作的权限,这里的查询的方法的放置有两种,一种是在主页面的验证密码的前写查询该用户的所能操作的模块,另一种是直接在
设置权限的方法里面写查询该用户的所能操作的模块,而这两种方法有所区别
第一种:在登录的时候获取权限模块(验证登录哪里写代码,优点:响应速度快,不用每次都去请求数据库;缺点:如果权限发生了变化,必须重新登录才能获取到新的权限模块)
第二种:或者直接从数据库提取(优点:可以实时获取数据变化,缺点:每次都请求数据库,数据库承载量提高,性能不是很好)
所以总上所述我们一般用第一种方法,先定义一个变量userModules为用户能操作的模块
然后在主页面的控制器里找到登录验证的方法,然后在验证用户输入密码与数据库的密码作对比的判断里写入权限验证
写完权限验证后,又回到PermissFilter.cs里面继续写分割链接
分割完链接后会就判断分割的长度是否包含0 - 空字符串,1 - 区域名称,2 - 控制器名称,3 - Action这四部分
(注意:这里因为直接拿控制器的名称作为模块的名称判断,所以一定要保证数据库里面的模块名称和控制器的名称一致)
最后在解决方案资源管理器下方找到Global.asax在里面注册全局过滤器
这样就完成了权限的设置。