zoukankan      html  css  js  c++  java
  • 关于创建用户时分配多个角色

    涉及到用户表、角色表和用户角色表

    html部分:

    分配角色列表的那些角色是用ViewBag从后台数据库获取过来的。

     1 <div id="dlgSave" title="新增信息" style="450px;height:360px;">
     2     <form id="EditForm" method="post" action="">
     3         <input type="hidden" id="hddfId" dn="Id" name="Id" />
     4         <table class="EditPanel" width="100%">
     5             <tr>
     6                 <td class="title" style="100px;"><span class="must">*</span>姓名:</td>
     7                 <td><input type="text" id="name" name="name" dn="name" class="{required:true}" maxlength="20" /></td>
     8             </tr>
     9 
    10 
    11             <tr>
    12                 <td class="title"><span class="must">*</span>登录名:</td>
    13                 <td><input type="text" id="loginname" name="loginname" class="{required:true}" dn="loginname" maxlength="20" /></td>
    14             </tr>
    15             <tr>
    16                 <td class="title"><span class="must">*</span>密码:</td>
    17                 <td><input type="text" id="pwd" name="pwd" class="{required:true}" dn="pwd" maxlength="20" /></td>
    18             </tr>
    19             <tr>
    20                 <th>分配角色</th>
    21             </tr>
    22             <tr>
    23                 <td>
    24                     <input type="checkbox" id="roles" name="roles" checked="checked" value="00" style="display:none"><br />
    25                     @foreach (var a in @ViewBag.Roles)
    26                     {
    27                         <a>@Html.Raw(a.name)</a>
    28                         <input type="checkbox" id="roles" name="roles" value="@a.Code"><br />
    29                     }
    30                 </td>
    31             </tr>
    32            
    33         </table>
    34     </form>
    35 </div>

    创建用户页面会将角色表中的角色数据传过来遍历展示,填完用户信息后再勾选要分配的角色,将用户信息和角色ID传到后台,角色ID以数组的形式传,中间用逗号分隔。html部分调用submit()方法进行提交,调用部分我没有写,有两种方法调用,一种是在按钮里用onclick调用,另一种是在js中用选择器调用。

     1 function submit() {
     2             var id;
     3             var name;
     4             var loginname;
     5             var pwd;
     6             var roleId = [];
     7             var i = 0;
     8             pwd = $('input[name = "pwd"]').val();
     9             name = $('input[name = "name"]').val();
    10             loginname = $('input[name = "loginname"]').val();
    11             if (pwd == "" || name == "" || loginname == "")
    12             {
    13                 id = $('input[name = "eid"]').val();
    14                 pwd = $('input[name = "epwd"]').val();
    15                 name = $('input[name = "ename"]').val();
    16                 loginname = $('input[name = "eloginname"]').val();
    17             }
    18             $('input[name="roles"]').each(function () {
    19                 var state = $(this).prop('checked');
    20                 if (state) {
    21                     
    22                     roleId[i] = $(this).val();
    23                     i++;
    24                 }
    25             });
    26             $.ajax(
    27                 {
    28                     data: { 'roleId': roleId, 'name': name, 'loginname': loginname, 'pwd': pwd, 'id': id },
    29                     dataType: 'text',
    30                     success: function (data) {
    31                         if (data == 1) {
    32                             JAlert.sinfo("保存成功~!");
    33                             dlg_save.close();
    34                             edlg_save.close();
    35                             LoadData();
    36                         }
    37                         else JAlert.error("保存失败!");
    38                     },
    39                     type: 'post',
    40                     url: 'CustomerSave',
    41                     traditional: true
    42                 }
    43             );
    44         }

    下面这是后台Controller的代码

    1 public object CustomerSave(Customer customer,UserRole userrole,string name,string loginname,string pwd,string roleId)
    2 {
    3      return Json(WebUserBll.CustomerSave(customer, userrole, roleId));
    4 }

    接下来是业务逻辑层。这里是对两张表进行操作,因此将整体写到事务里,只有两张表都成功更新才提交操作,保证数据库操作的一致性。

     1 public static object CustomerSave(Customer customer,UserRole userrole,string roleId)
     2         {
     3             using (DBSession session = DBSession.TryGet())
     4             {
     5                 try
     6                 {
     7                     session.BeginTransaction();
     8                     int cont = session.ExecuteScalar<int>(
     9                     string.Format("select count(1) from a_user where id=?"), customer.Id);
    10                     if (cont == 0)
    11                     {
    12                         customer.Id = MyIdMake.New();
    13                         session.Insert<Customer>(customer);
    14                     }
    15                     if(cont > 0)
    16                     {
    17                         Customer old = session.GetObject<Customer>("id= ?", customer.Id);
    18                         customer.Id = old.Id;
    19                         if (old == null) throw new MyException("修改的用户不存在");
    20                         session.Update<Customer>(customer);
    21                     }
    22                     List<string> list = new List<string>(roleId.Split(','));
    23 
    24                     foreach (var a in list)
    25                     {
    26                         if(a!="00")
    27                         {
    28                             userrole.userId = customer.Id;
    29                             userrole.roleId = a;
    30                             userrole.Id = MyIdMake.New();
    31                             session.Insert<UserRole>(userrole);
    32                         }
    33                     }  
    34                     session.Commit();
    35                     return 1;
    36                 }
    37                 catch
    38                 {
    39                     session.Rollback();
    40                     return 0;
    41                 }
    42             }
    43         }

    roleId是数组形式,用下面这段代码将数组中的各个字段取出来放到列表里。再用再用foreach遍历LIst中的所有元素,逐个存入userrole表中。

    List<string> list = new List<string>(roleId.Split(','));
    

    总结来说,所有信息一次性提交到后台,再在后台分别操作表。如user的信息只有一组,则只用往user表插入一次数据;而分配的权限是多个权限,则在后台把每个权限分开放在List<string>中,再用循环去列表里的数据,取出来一个就对用户角色表Insert一次。 

    以上整个过程的重点是js部分的ajax,还有业务逻辑层Split()方法分隔字符串从而将每个角色的id提取出来。

  • 相关阅读:
    (OK) Use Android Code to Enable USB Debugging
    add software "mouse cursor" in Android-x86
    Subject: [android-porting] Mouse cursor:issue with dispatchPointer
    BUG实例分析五:binder alloc buf, no vma
    【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) A】Packets
    【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
    【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions
  • 原文地址:https://www.cnblogs.com/kk138/p/13397346.html
Copyright © 2011-2022 走看看