微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方便,使之程序员把更多的精力投入到业务中来。很多时候我就在想,是不是该把传统的用户 ...
微软在推出get='_blank'>mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方便,使之程序员把更多的精力投入到业务中来。
很多时候我就在想,是不是该把传统的用户权限管理换个方式了呢?换成MVC AOP的思想权限控制,诸如controller action这种方案行的通吗?答案是肯定的,人的思想永远是第一位!
1.基于controller action控制权限的好处
其实合起来看,controller与action即控制了一个页面的行为,如能是否查看,写入,修改权限,而我们在开发的过程中,这些方法都已完成,这样省去了像传统方式对每个页面重新控制生成的步骤。当前通过反射程序集收集所有的controller action信息,自动化收集权限控制是比较可观的。
2.基于controller action控制权限的方案
权限列表通过反射自动从程序集获取,管理员(默认有最高权限)把权限分配给用户及分配权限分配给角色,管理员对用户分配权限角色权限,如图所示
用户权限列表及角色权限列表分配成形Controller与Action信息后,通过代码控制对应的控制器及方法是否有权限。
3.基于controller action控制权限信息的提取的方案
有些方法不需要提取的,有些方法需要权限控制,为了让程序方便提取权限信息,我们加入特性,如果方法或控制器有此特性,即要控制的,当然为了节约代码,默认特性是false,这样,没有加特性的或者特性是false的,都不用提取!
4.基于mvc controller和action 权限管理流程图
不明白的亲们不用太着急,下面开始详细的步骤吧!
首先我们通过上面的分析,我们用模型来一点一点的剖析
从左至右,相关的模型是,权限信息列表,角色列表,用户信息列表,部门列表,菜单列表
1)一个用户可以有多个权限,一个权限可以分配多个用户,所以是多对多的关系
2)一个角色可以有多个权限,一个权限可以分配多个角色,所以是多对多的关系
3)一个用户可以有多个角色,一个角色可以分配多个用户,所以是多对多的关系
4)一个用户可以有多个部门,一个部门可以分配多个角户,所以是多对多的关系
5)菜单列表,主要针对后台每个用户或角色不同的展示方式,以及可以自定义图片等
好了,到此为止,我们开始正式的工作。
由上列模型,我们采用code first生成数据库,如何使用 code first 请搜索下百度或将来有专门的章节介绍,这里不再累赘说明!
我们添加,添加以后几个model类
1)权限控制类:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel;using System.ComponentModel.DataAnnotations;namespace WL.Models.Permission{ [DisplayName("控制权限")] public class ActionPermission { [Key] [DisplayName("控制权限ID")] public int ActionPermissonID { set; get; } [DisplayName("控制权限名称")] public string ActionPermissionName { set; get; } [DisplayName("控制器权限名称")] public string ControllerPermissionName { set; get; } [DisplayName("说明")] public string Description { set; get; } [DisplayName("创建时间")] public DateTime CreateDate { set; get; } [DisplayName("操作用户名")] public string Operator { set; get; } [DisplayName("最后修改时间")] public DateTime LateDate { set; get; } [DisplayName("图标")] public string Icon { get; set; } [DisplayName("状态")] public int State { set; get; } [Description("用户实体集合")] public virtual ICollection<User> UserCollection { get; set; } [Description("角色实体")] public virtual ICollection<Role> RoleCollection { get; set; } }}
原标题:尝试asp.net mvc 基于controller action 方式权限控制方案可行性
关键词:ASP.NET
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。