索引
【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
简述
今天我们来做角色的管理 和 角色权限分配
项目准备
我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。
项目开始
首先,我们来声明一下需要的接口(注意 xml配置注入 前面文章有详细步骤 这里不解释了)
1、然后我们来修改一下视图Index ,添加权限控制
1 [UserAuthorizeAttribute(ModuleAlias = "Role", OperaAction = "View")] 2 public ActionResult Index() 3 { 4 5 return View(); 6 7 }
2、我们来处理一下查询参数 角色我们是分系统的,所以前台会有一个系统的选择,还有关键字查询(这个我们通过BaseController 来传递,我们这里只是定义一个参数传给视图,让搜索过的关键字在文本框中显示)
先给大家看一下前台的页面效果
1 /// <summary> 2 /// 加载主页 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "Role", OperaAction = "View")] 6 public ActionResult Index() 7 { 8 try 9 { 10 #region 处理查询参数 11 12 //系统ID 13 string System = Request.QueryString["System"]; 14 ViewData["System"] = System; 15 16 //搜索的关键字(用于输出给前台的Input显示) 17 ViewBag.Search = base.keywords; 18 #endregion 19 20 //输出用户所拥有的系统列表到视图页 21 ViewData["Systemlist"] = this.SystemManage.LoadSystemInfo(CurrentUser.System_Id); 22 23 //输出分页查询列表 24 return View(BindList(System)); 25 } 26 catch (Exception e) 27 { 28 WriteLog(Common.Enums.enumOperator.Select, "加载角色列表:", e); 29 throw e.InnerException; 30 } 31 }
3、我们待会做视图页的时候在处理 ViewData["System"]、ViewData["Systemlist"]和ViewBag.Search
我们先来处理一下 输出列表 BindList(System) ,新建一个私有方法 private Common.PageInfo BindList(string system) 输出结果为 Common.PageInfo
1 /// <summary> 2 /// 分页查询角色列表 3 /// </summary> 4 private Common.PageInfo BindList(string system) 5 { 6 7 }
4、首先预加载一下基础数据
1 //基础数据 2 var query = this.RoleManage.LoadAll(null);
5、传递的系统ID(正常来说 如果传入系统ID 那么就查询系统下的角色,如果没有传递就查询全部系统角色,但是我们这个是分系统控制的,所以,当没有系统ID传入的时候,我们查询用户可操作的系统的角色)
1 //系统 2 if(!string.IsNullOrEmpty(system)) 3 { 4 int SuperAdminId = Common.Enums.ClsDic.DicRole["超级管理员"]; 5 query = query.Where(p => p.FK_BELONGSYSTEM == system || p.ISCUSTOM == true); 6 } 7 else 8 { 9 query = query.Where(p => this.CurrentUser.System_Id.Any(e => e == p.FK_BELONGSYSTEM)); 10 }
6、关键字的查询(这个keywords是通过BaseController传递的)
1 //查询关键字 2 if (!string.IsNullOrEmpty(keywords)) 3 { 4 query = query.Where(p => p.ROLENAME.Contains(keywords)); 5 }
7、排序 分页
1 //排序 2 query = query.OrderByDescending(p => p.CREATEDATE); 3 //分页 4 var result = this.RoleManage.Query(query, page, pagesize);
8、要展示的视图内容
1 var list = result.List.Select(p => new 2 { 3 //以下是视图需要展示的内容,加动态可循环 4 p.CREATEDATE, 5 p.ROLENAME, 6 p.ROLEDESC, 7 USERNAME = p.CREATEPERID, 8 p.ID, 9 SYSNAME = SystemManage.Get(m=>m.ID==p.FK_BELONGSYSTEM).NAME, 10 ISCUSTOMSTATUS = p.ISCUSTOM ? "<i class=\"fa fa-circle text-navy\"></i>" : "<i class=\"fa fa-circle text-danger\"></i>" 11 }).ToList();
9、返回分页内容列表
1 return new Common.PageInfo(result.Index, result.PageSize, result.Count, Common.JsonConverter.JsonClass(list));
10、完整的方法
1 /// <summary> 2 /// 分页查询角色列表 3 /// </summary> 4 private Common.PageInfo BindList(string system) 5 { 6 //基础数据 7 var query = this.RoleManage.LoadAll(null); 8 //系统 9 if(!string.IsNullOrEmpty(system)) 10 { 11 int SuperAdminId = Common.Enums.ClsDic.DicRole["超级管理员"]; 12 query = query.Where(p => p.FK_BELONGSYSTEM == system || p.ISCUSTOM == true); 13 } 14 else 15 { 16 query = query.Where(p => this.CurrentUser.System_Id.Any(e => e == p.FK_BELONGSYSTEM)); 17 } 18 //查询关键字 19 if (!string.IsNullOrEmpty(keywords)) 20 { 21 query = query.Where(p => p.ROLENAME.Contains(keywords)); 22 } 23 //排序 24 query = query.OrderByDescending(p => p.CREATEDATE); 25 //分页 26 var result = this.RoleManage.Query(query, page, pagesize); 27 28 var list = result.List.Select(p => new 29 { 30 //以下是视图需要展示的内容,加动态可循环 31 p.CREATEDATE, 32 p.ROLENAME, 33 p.ROLEDESC, 34 USERNAME = p.CREATEPERID, 35 p.ID, 36 SYSNAME = SystemManage.Get(m=>m.ID==p.FK_BELONGSYSTEM).NAME, 37 ISCUSTOMSTATUS = p.ISCUSTOM ? "<i class=\"fa fa-circle text-navy\"></i>" : "<i class=\"fa fa-circle text-danger\"></i>" 38 }).ToList(); 39 40 return new Common.PageInfo(result.Index, result.PageSize, result.Count, Common.JsonConverter.JsonClass(list)); 41 }