Mvc4+autofac+jggrid+nhibernate(2)权限管理

写这篇博文只是介绍下思路,主要目的是为了找工作,所以细节不是很详细,请大家勿喷。

不说废话了先上图。

 

 

 上面是表之间关系。字段没有写完全,只写了重要的项目中要用到的字段

UserAccount表用户表,保存用户信息,

Role表很重要,做为聚合根来使用,其他与之关联的表,可以通过它来实现,更新,插入,查询操作。

RoleUserAccount多对多关系的关联表。

Menu菜单表,用来生成 树形菜单。他它的字段内容可以根据你使用的树形菜单UI来设计。

Capalibity权限表,一个菜单对应一个权限,这里要说明下AccessType字段,是个枚举类型,包含:None:无权限访问,只读权限,编辑权限,ReadOnly:无权限,只读权限,Edit;无权限,编辑权限,它和RoleCapalibity中的AccessFlag字段相关联。决定了AccessFlag所要显示的选项个数。当读取到这个属性时,模块会这样显示

 

RoleCapalibity 角色权限关联表:AccessFlag字段有三个值,也是枚举字段,包括:无权限,只读,编辑。它与角色关联,决定了用户访问页面的权限。

2,具体实现过程

 1,先实现核心部分,用户角色编辑页面。如图

角色关联的用户通过上面的自定义UI实现,左边查询出所用不在这个角色中的用户,右边是这个角色中关联的用户。使用jqgrid实现。客户端代码如下。因为采用了母板页,所以有section节存在,

 1 @section scripts{   
 2    
 3      caption: "角色管理",
 4 url: "/role/GetJson",  5 multiselect: true,  6 colNames: ['', 'ID', '角色名'],  7  colModel: [  8  9 {classes: 'form-control',name: 'UserAccounts', index: 'UserAccounts', label: 'UserAccounts', sortable: false, editable: true, hidden: true, edittype: 'custom', editoptions: { dataUrl: "/role/GetSelectValue", multiple: true, custom_element: mySelectElem2, custom_value: mySelectValue }, editrules: { edithidden: true, custom:true, custom_func:customerSelectRequired } 10  }, 11 12 { name: 'Id', index: 'Id', searchrules: { required: true, integer: true }, sorttype: "int", editable: false }, 13 //要于server端的数据名匹配。 14 { name: 'Name', index: 'Name', editrules: { required: true }, editable: true, editoptions: { size: "20", maxlength: "30" } }, 15 // { name: 'sdate', index: 'sdate', editable: true, sorttype: "date", unformat: pickDate }, 16 //{ name: 'stock', index: 'stock', editable: true, edittype: "checkbox", editoptions: { value: "Yes:No" }, unformat: aceSwitch }, 17 //{ name: 'ship', index: 'ship', width: 90, editable: true, edittype: "select", editoptions: { value: "FE:FedEx;IN:InTime;TN:TNT;AR:ARAMEX" } }, 18 //{ name: 'note', index: 'note', width: 150, sortable: false, editable: true, edittype: "textarea", editoptions: { rows: "2", cols: "10" } } 19  ], 20  } 21 @section beforeInitDataRoleAdd{ 22 url: "/role/Create", 23 beforeInitData: function (e) { 24 25 $(grid_selector).setColProp('UserAccounts', { editable: false }); 26 return true; 27  }, 28 29 30 31 32 33  } 34  @section beforeInitDataRoleEdit{ 35 url: "/role/Edit", 36 beforeInitData: function (e) { 37 38 $(grid_selector).setColProp('UserAccounts', { editable: true }); 39 return true; 40  }, 41 42 //mtype:"POST", 43 44 }
View Code

下面是jqgrid中自定义的编辑控件函数

  1 @section GetElem{
  2       function getSelected(elem) {
 3 //把select name属性去掉即不会选中时自动包装被选择数据,这样就可以一次把所有数据手工加载到formData中  4 var nm=$(elem).attr('name');  5 var textNmArry = nm.split('.');  6 var arryLength = textNmArry.length;  7 // var textNm = textNmArry[arryLength - 1];  8 var textNm = "UserName";  9 var selected = $(elem).find("option");  10 if (selected.length !== 0)  11  {  12 var jsonSelect = [];  13 selected.each(function (i, n) {  14 var jsting = "{'Id':" + $(this).val() + ",'" + textNm + "':'" + $(this).text() + "'}";  15  16  17  18  jsonSelect.push(jsting);  19  })  20  21  }  22  23  24 return jsonSelect.join(',');  25 }  26 function mySelectElem2(value, options) {  27  28 //alert(options.dataUrl);  29 var selectStr = "<select class='form-control' role='select' style='width:150px;height:200px;' multiple='multiple' aria-multiselectable='true'></select>";  30  $.ajax({  31  url: options.dataUrl,  32 type: "GET",  33 contentType: "application/json.net",  34 data: { roleId: $(grid_selector).jqGrid('getGridParam', 'selrow') },  35 dataType: "json",  36  37 success: function (data) {  38  39 var inRoleOption = "", notInRoleOption = "";  40  41 if (data.inRoleUser[0] !== null) {  42 $.each(data.inRoleUser, function (idx, item) {  43 inRoleOption = inRoleOption + "<option role='option' value='" + item.Id + "'>" + item.UserName + "</option>";  44  45  });  46  }  47 else  48 inRoleOption = "<option role='option' value='0'>未赋值</option>";  49  50 if (data.notInRoleUser[0] !== null) {  51 $.each(data.notInRoleUser, function (idx, item) {  52 notInRoleOption = notInRoleOption + "<option role='option' value='" + item.Id + "'>" + item.UserName + "</option>"  53  54  });  55  }  56 else  57 notInRoleOption = "<option role='option' value='0'>未赋值</option>";  58  59 // alert(data.inRoleUser);  60 var celm = $("span.FormElement .customelement");  61  62 if (celm.length==1) {  63 celm.wrap("<div class='form-group' style='float:left;width:150px;'></div>").before("<label for='" + options.name + "'>绑定成员</label>");  64 celm.closest("div").before("<div class='form-group' style='float:left;width:150px;'><label for='SelectedUsers'>未绑定成员</label><select id='SelectedUsers' class='notSelectedUsers form-control' style='height:200px;' multiple='multiple'></select></div><div class='form-group' style='float:left;padding:70px 10px;'><button type='button' id='notSelectedUsers_Btn' class='btn btn-primary btn-xs btn-block'>移入 >></button><button type='button' id='customelement_Btn' class='btn btn-primary btn-xs btn-block'><< 移除</button></div>");  65 if (notInRoleOption.match(/未赋值/) != null)  66 $('#SelectedUsers').append(notInRoleOption).attr("disabled", "disabled");  67 else  68 $('#SelectedUsers').append(notInRoleOption);  69  70 if (inRoleOption.match(/未赋值/) != null)  71 celm.append(inRoleOption).attr("disabled", "disabled");  72 else  73  celm.append(inRoleOption);  74  75  76 $('.form-group').wrapAll("<div id='selectOutWapper' style='height:200px;' />");  77  78  SelectBtnInteraction();  79  }  80  81  }  82  83  84  });  85  86  87 return $(selectStr);  88  }  89  90 function mySelectValue(elem, operation, value) {  91  92 if (operation === 'get') {  93 //alert($(elem).val());  94 return getSelected(elem);  95 } else if (operation === 'set') {  96  97 $('select',elem).val(value);  98  }  99  } 100 function SelectBtnInteraction() { 101 102 103 104 $('#selectOutWapper button[type="button"]').each(function (index) { 105 $(this).click(function () { 106 107 var btnId = $(this).attr("id"); 108 var selectClass = btnId.substr(0, btnId.indexOf('_')); 109 110 var op = $("#selectOutWapper select").not("." + selectClass); 111 var oo = op.find("option").get(0); 112 var select1 = $('select.' + selectClass); 113 114 

转载于:https://www.cnblogs.com/shanBlog/p/4089624.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 MVC5 中使用 Autofac 进行配置文件注入,需要按照以下步骤进行操作: 1. 安装 AutofacAutofac.Mvc5 NuGet 包。 2. 创建一个类来注册依赖项。例如,可以创建一个名为 AutofacConfig 的类。 3. 在 AutofacConfig 类中创建一个静态方法来注册依赖项。该方法应该接受一个 IContainerBuilder 对象作为参数。 4. 在 Register 方法中,使用 RegisterControllers 方法注册控制器。 5. 使用 RegisterAssemblyModules 方法注册程序集中的所有模块。 6. 使用 RegisterModelBinders 方法注册模型绑定器。 7. 使用 RegisterFilterProvider 方法注册筛选器提供程序。 8. 在 Global.asax.cs 文件中的 Application_Start 方法中,调用 AutofacConfig 类的 Register 方法,并将其传递给一个新的 ContainerBuilder 对象。 9. 在 Global.asax.cs 文件中的 Application_EndRequest 方法中,调用 AutofacDependencyResolver 类的 Dispose 方法以清理依赖项。 下面是一个示例 AutofacConfig 类,用于在 MVC5 中实现配置文件注入: ```csharp using Autofac; using Autofac.Integration.Mvc; using System.Web.Mvc; public class AutofacConfig { public static void Register(ContainerBuilder builder) { builder.RegisterControllers(typeof(MvcApplication).Assembly); builder.RegisterAssemblyModules(typeof(MvcApplication).Assembly); builder.RegisterModelBinders(typeof(MvcApplication).Assembly); builder.RegisterFilterProvider(); // 注册依赖项 builder.Register(c => new MyService(c.Resolve<MyDependency>())).As<IMyService>().InstancePerRequest(); builder.RegisterType<MyDependency>().As<IMyDependency>().SingleInstance(); } } ``` 在 Global.asax.cs 文件中,可以像这样调用 AutofacConfig 类的 Register 方法: ```csharp protected void Application_Start() { var builder = new ContainerBuilder(); AutofacConfig.Register(builder); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); // ... } ``` 然后,在 Global.asax.cs 文件中的 Application_EndRequest 方法中,可以像这样调用 AutofacDependencyResolver 类的 Dispose 方法: ```csharp protected void Application_EndRequest() { var resolver = DependencyResolver.Current as AutofacDependencyResolver; if (resolver != null) { resolver.Dispose(); } } ``` 以上就是在 MVC5 中使用 Autofac 进行配置文件注入的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值