ASP.NET MVC+EF框架+EasyUI落成权力管理序列(23)-设置角色遗留难点和为权力设置角色以及EasyUI Tabs的应用

  ASP.NET MVC+EF框架+EasyUI达成权力管连串

  (开篇)   (1):框架搭建    (2):数据库访问层的规划Demo    (3):面向接口编程   (4
):业务逻辑层的包装
   

      (5):前台Jquery
easyUI实现 
  (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一   

      (9):TT摸版的就学    (10):VSS源代码管理    (11):验证码完成和底部修改  (12):已毕用户异步登录和T4模板 
 

    
 (13):权限设计
  (14):主框架搭建   (15):权限数据库模型和用户登录详细错误    (16):用户注册的各样申明 **

**    
 
(17):注册用户功效的细节处理 
 (18):过滤器的拔取和批量删减数据(伪删除和平素删除) **

**     (19):用户音讯的修改和浏览   (20):多规格模糊查询和回收站还原的兑现   (21):用户角色权限基本的落成认证**

    (22):为用户安装角色

  前言:那段日子博客的换代相比慢,重假使那段时间工作方面相比忙点,清晨归来在吹吹风,写一点点的代码就能休息了,所以用了那段日子把代码基本写完了,可是博客的换代速度比较慢,紧借使背后的那部分情节感觉博客糟糕写,一会在页面,一会在控制器,一会又在Model中操作,感觉写的乱而不识,固然是那样,不过大家仍然要写下去,给我们一个成型的事物才能感觉到大圆满,希望我们可以清楚,那么今日我们就从头说俺们明日的始末,前几天的内容首要有那多少个趋势,(1):完善上篇博客中遗留的标题,(2):为用户设置权限,这么些的贯彻效益和上篇博客基本相同,所以那边相当于基本提一下就行,(3):重新对页面举行布局,完成Tab页面。

1. 为用户设置剧中人物遗留难题—全局查询

  (1)上篇博客大家着力说完了为用户安装角色,不过大家依据从前的代码书写的话发现了一个标题,那就是大家的用户数量查询不到了,那是怎么着来头吗?其实原因也很简短,那就是用户和剧中人物是多对多的关联,当我们为用户安装剧中人物的话,用户表中会存放角色表的实业,而剧中人物表则会存放用户表的实业,那个大家可以在Edmx模型中来看,那么为啥会那样呢?原因就是当我们体系化BaseUser实体的时候,发现带有BaseRole属性,那时候就要连串化BaseRole属性,这时候EF提供了一个系列化导航属性的时候的推迟加载起成效了,那样的话他就会循环的去查询BaseRole和BaseUser实体类,那样连串化的话就会生出死循环,所以会报错。

  (2)按照地点我们也晓得了原先的代码会现出错误,那么我们怎么幸免这一个颠倒是非,使我们的用户体现出来数据吧?其实我们只需求用linq将BaseUser字段全体询问出来即可,最终对用户的控制器查询作用修改将来的代码如下所示:

 1         /// <summary>
 2 
 3         /// 获取所有的用户信息
 4 
 5         /// </summary>
 6 
 7         /// <returns>返回用户详细信息的Json对象</returns>
 8 
 9         public ActionResult GetAllUserInfos()
10 
11         {
12 
13             //Json格式的要求{total:22,rows:{}}
14 
15  
16 
17             //实现对用户分页的查询,rows:一共多少条,page:请求的当前第几页
18 
19             int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);
20 
21             int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);
22 
23             //得到多条件查询的参数
24 
25             string RealName = Request["RealName"];
26 
27             string Telephone = Request["Telephone"];
28 
29             string EMail = Request["EMail"];
30 
31             int? Enabled = Request["Enabled"] == null ? -1 : int.Parse(Request["Enabled"]);
32 
33             string AuditStatus = Request["AuditStatus"];
34 
35             int? DeletionStateCode = Request["DeletionStateCode"] == null ? 0 : int.Parse(Request["DeletionStateCode"]);
36 
37             int total = 0;
38 
39             //调用分页的方法,传递参数,拿到分页之后的数据
40 
41             //var data = _userInfoService.LoadPageEntities(pageIndex, pageSize, out total,
42 
43             //    u => true && u.DeletionStateCode == 0, true, u => u.SortCode);
44 
45             //封装一个业务逻辑层的方法,来处理分页过滤事件
46 
47             var userInfoQuery = new UserInfoQuery()
48 
49             {
50 
51                 PageSize = pageSize,
52 
53                 PageIndex = pageIndex,
54 
55                 RealName = RealName,
56 
57                 Telephone = Telephone,
58 
59                 EMail = EMail,
60 
61                 Enabled = Enabled,
62 
63                 AuditStatus = AuditStatus,
64 
65                 Total = 0,
66 
67                 DeletionStateCod = DeletionStateCode
68 
69             };
70 
71              //如果含有导航属性关联的话,出现循环引用的问题,死循环
72 
73             var data = from u in _userInfoService.LoadSearchData(userInfoQuery)
74 
75                        select new
76 
77                        {
78 
79                            u.ID,u.AuditStatus,u.Birthday,u.ChangePasswordDate,u.Code,u.CreateBy,u.CreateOn,u.CreateUserID,u.DeletionStateCode,u.DepartmentID,u.Description,u.Email,u.Enabled,u.Gender,u.HomeAddress,u.IsStaff,u.IsVisible,u.Mobile,u.ModifiedBy,u.ModifiedUserID,u.ModifirdOn,u.QICQ,u.QuickQuery,u.RealName,u.SecurityLevel,u.SortCode,u.Telephone,u.Title,u.UserFrom,u.UserName,u.UserPassword
80 
81             };
82 
83             //构造成Json的格式传递
84 
85             var result = new { total = userInfoQuery.Total, rows = data };
86 
87             //return JsonDate(result);
88 
89             return Json(result, JsonRequestBehavior.AllowGet);
90 
91         }

  (3)通过上述的代码完结大家就消除了俺们前边提到我们相遇的标题,这里大家假若有哪些不懂的话能够给我留言,或然自身的断言表明能力不怎么好,只好发挥到那边了。

2.为权力设置角色

  (1)上述大家看看的那个标题大概的达成思路是永恒的,因为大家在上一篇博客中一度介绍过了,为用户安装角色,那多少个大的模块的落到实处思路基本是一律的,所以在这篇博客中自己就不再介绍了,代码我都曾经写完,希望我们可以参见上篇博客来促成这几个意义。

  (2)那么大家为啥给权力设置剧中人物吗?看大家的Edmx模型其实大约就知晓了,我那边大概的说一下,为用户安装角色,大家的角色中自然要对应于权限的操作,所有那样就出现了大家要为权限设置剧中人物。

  (3)达成效益如图所示:

     图片 1

3.EasyUI Tabs标签页面的已毕

  (1)在说那个的利用以前我们先是看一下我们此前的前台页面的架构,如图所示:图片 2

  (2)那么看大家未来项目标前台页面的架构,大家得以窥见大家引入了EasyUI
Tabs之后的变更,如图所示:图片 3

  (3)EasyUI
Tabs控件落成了,不过在这里我们就会际遇当大家再一次单击右侧的领航的时候会发出怎么样变化,那么重大的代码如下:

 1 //绑定菜单按钮的点击事件  MenuLink
 2 
 3 function BindMenuClickEvent() {
 4 
 5    $(".MenuLink").click(function () {
 6 
 7        //获取按钮里面的src属性
 8 
 9        var src = $(this).attr("src");
10 
11        //将主框架的iframe跳转到菜单指向的地址
12 
13        //$("#frmWorkArea").attr("src", src);
14 
15        //得到节点的名字来放去Title
16 
17        var title = $(this).text();
18 
19        //拼接一个Iframe标签
20 
21        var str = '<iframe id="frmWorkArea" width="100%" height="100%" frameborder="0" scrolling="yes" src="' + $(this).attr("src") + '"></iframe>'
22 
23        //首先判断用户是否已经单击了此项,如果单击了直接获取焦点,负责打开
24 
25        var isExist = $("#worktab").tabs('exists', title);
26 
27        if (!isExist) {
28 
29             //添加tab的节点,调用easyUITab标签的方法
30 
31             $("#worktab").tabs('add', {
32 
33                 title: title,
34 
35                 content: str,
36 
37                 iconCls: 'icon-save',
38 
39                 closable: true
40 
41               });
42 
43            }
44 
45            else {
46 
47                //如果存在则获取焦点
48 
49                $("#worktab").tabs('select', title);
50 
51            }
52 
53        });
54 
55   }

4.那篇博客到此地基本就曾经写完了,我们阅读的时候假使有啥样难题可以给本人留言,我将会在第一时间回复,那篇博客大家看起来恐怕有点困难,因为不连贯,所以我们可以看看前面的博客在看这篇博客的时候将会很好听的,那么下篇博客大家发轫讲述权限组的兑现。

源码下载

   (1):一体化源码下载

 

    Kencery归来本体系开篇