索引

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

简述

今天我们来做角色的管理 和 角色权限分配

项目准备

我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5

希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。

项目开始

首先,我们来声明一下需要的接口(注意 xml配置注入 前面文章有详细步骤 这里不解释了)

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(9) 角色管理,分配权限

1、然后我们来修改一下视图Index ,添加权限控制

1    [UserAuthorizeAttribute(ModuleAlias = "Role", OperaAction = "View")]
2         public ActionResult Index()
3         {
4      
5                 return View();
6        
7         }

 

2、我们来处理一下查询参数 角色我们是分系统的,所以前台会有一个系统的选择,还有关键字查询(这个我们通过BaseController 来传递,我们这里只是定义一个参数传给视图,让搜索过的关键字在文本框中显示)

先给大家看一下前台的页面效果

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(9) 角色管理,分配权限

 

 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         }
View Code

相关文章: