博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web应用程序系统的多用户权限控制设计及实现-权限模块【6】
阅读量:6351 次
发布时间:2019-06-22

本文共 14357 字,大约阅读时间需要 47 分钟。

前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,从本章起则重点讲述每一个模块的实现的流程。

首先讲解基本模块-用户组管理模块,涉及到的数据表为分组表。分组表定义了每一个用户属于的一种角色类型。本系统支持一个用户多种角色的情况,系统在登陆成功后,首先就加载用户的分组信息从而查看用户的可操作模块。

1.1分组域

为了更规范和方便后期系统的二次开发和维护,对应特定的业务模块采用Area(域)的方式开发,分组模块的开发域如下图所示:

由于在Areas下还建立了一个新的目录SystemManage,故需要改变原来的路由。分组模块的路由文件名称为SystemManageAreaRegistration。改变路由代码的文件名称为如下:

using System.Web.Mvc;

namespace CodeForMvcTest.Areas.SystemManage
{
    public class SystemManageAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "SystemManage/OperatorGroup";
            }
        }
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "SystemManage_OperatorGroup",
                "SystemManage/OperatorGroup/{controller}/{action}/{id}",
                new { action = "index", id = UrlParameter.Optional }
            );
        }
    }
}

 1.2Model

分组模块的Model可参看第三章项目架构的系统共有类,对应model为OperatorGroup.cs。文件路径为Areas/SystemManage/Models。

 1.3视图

分组模块的视图包含在分组域中,文件路径为Areas/SystemManage/OperatorGroup/Views/OperatorGroupManage,视图名称为OperatorGroupManage.cshtml。视图的完整代码如下:

1 @{  2     ViewBag.Title = "用户组管理";  3     Layout = "~/Views/Shared/_BaseLayout.cshtml";  4 }  5   6   7 
8 9
10 @using (Ajax.BeginForm("OperatorGroupManage", "OperatorGroupManage", new AjaxOptions 11 { 12 HttpMethod = "POST", 13 OnSuccess = "loadDataGrid(data,'dataGrid','btn_submit','未找到匹配的用户组信息!')", 14 OnBegin = "startDatagridLoading('dataGrid','btn_submit')", 15 OnFailure = "commErrorHandle(data,true,'dataGrid','btn_submit','查找用户组信息出错!')" 16 })) 17 { 18
19
20
21
22
25
26
34
37
38
用户组名称: 23 24 状态: 27 33 35 36
39 } 40
41 42
43
50
51
52
53
54
55
56
57
58
59
60 @Html.Raw(ViewBag.GroupList) 61
62
用户组ID 用户组名称 排序值 状态 操作
63
64
65 66
67 68
69
72 73 74
75
76
77
78
79
80
83
84
85
86
89
90
91
92
99
100
101
107
108
名称: 81 82
排序值: 87 88
状态: 93 98
102 103 104 106
109
110
111 112 113 114
115
116
117
118
119
120
123
124
125
126
129
130
131
132
139
140
141
146
147
名称: 121 122
排序值: 127 128
状态: 133 138
142 143 145
148
149
150 151 152 153 @section scripts154 {155 156 }
OperatorGroupManage.cshtml

 1.4JS文件

分组模块相关的JS文件路径为Areas/SystemManage/SystemJS,JS文件名称为operatorGroupManage.js。JS的完整代码如下:

1 //状态显示格式化  2 function statusformater(value, row, index) {  3     if (row.State == "0") {  4         return "禁用";  5     } else {  6         return "启用";  7     }  8 };  9  10 //属性组操作显示格式化 11 function operateFormater(value, row, index) { 12     var operationStr = "编辑"; 14     return operationStr; 15 }; 16  17  18 //打开用户组编辑窗体 19 function openEditWindow(groupId, groupName, orderNum, state) { 20     $("#e_groupName").val(groupName); 21     $("#e_orderNum").numberbox('setValue', orderNum); 22     $("#e_state").combobox("select", state); 23     $("#e_groupId").val(groupId); 24     $('#groupEditWin').window('open'); 25 }; 26  27  28 //打开添加用户组窗体 29 function openAddWindow() { 30     $("#a_groupName").val(""); 31     $("#a_orderNum").numberbox('setValue', ""); 32     $("#a_state").combobox("select", "0"); 33     $('#groupAddWin').window('open'); 34 }; 35  36  37 $(function () { 38     $('#groupEditWin').window({ 39         modal: true, 40         collapsible: false, 41         minimizable: false, 42         maximizable: false, 43         draggable: true, 44         resizable: false, 45         closable: false, 46         closed: true 47     }); 48  49  50     $('#groupAddWin').window({ 51         modal: true, 52         collapsible: false, 53         minimizable: false, 54         maximizable: false, 55         draggable: true, 56         resizable: false, 57         closable: false, 58         closed: true 59     }); 60  61  62     //修改用户信息 63     $("#groupEditForm").submit(function (event) { 64         //中断当前的提交事件 65         event.preventDefault(); 66         //提交的URL,默认为属性组修改或添加路径 67         var url = "/SystemManage/OperatorGroup/OperatorGroupManage/UpdateGroup"; 68         //名称 69         var groupName = $("#e_groupName").val(); 70         if (groupName == "") { 71             alert("用户组名称不能为空!"); 72             return false; 73         } 74         //排序值 75         var orderNum = $("#e_orderNum").numberbox('getValue'); 76         if (orderNum == "") { 77             alert("请输入排序值!"); 78             return false; 79         } 80  81         $('#groupEditWin').window('close'); 82         startDatagridLoading('dataGrid', 'btn_submit'); 83  84         //表单序列化 85         var formData = $("#groupEditForm").serialize(); 86         //完整路径 87         url = url + "?" + formData; 88  89         $.ajax({ 90             url: url, 91             type: 'POST', 92             dataType: 'text', 93             success: function (data) { 94                 if (data.indexOf("/Login/Login") >= 0) { 95                     window.parent.location.href = '/Login/Login'; 96                 } 97                 groupName = $("#groupName").val(); 98                 var state = $("#state").combobox("getValue"); 99                 url = "/SystemManage/OperatorGroup/OperatorGroupManage/OperatorGroupManage?groupName=" + groupName100                     + "&state=" + state;101 102                 alert(data);103 104                 reloadDatagrid(url, "dataGrid", "btn_submit", "无用户组数据返回!", "查询用户组数据出错!");105             },106             error: function (data) {107                 commErrorHandle(data, true, 'dataGrid', 'btn_submit', "操作出错!");108             }109         });110     });111 112 113     //添加用户信息114     $("#groupAddForm").submit(function (event) {115         //中断当前的提交事件116         event.preventDefault();117         //提交的URL,默认为属性组修改或添加路径118         var url = "/SystemManage/OperatorGroup/OperatorGroupManage/AddGroup";119         //账号120         var groupName = $("#a_groupName").val();121         if (groupName == "") {122             alert("用户组名不能为空!");123             return false;124         }125         //排序值126         var orderNum = $("#a_orderNum").numberbox('getValue');127         if (orderNum == "") {128             alert("请输入排序值!");129             return false;130         }131 132         $('#groupAddWin').window('close');133         startDatagridLoading('dataGrid', 'btn_submit');134 135         var groupId;136         //表单序列化137         var formData = $("#groupAddForm").serialize();138         //完整路径139         url = url + "?" + formData;140 141         $.ajax({142             url: url,143             type: 'POST',144             dataType: 'text',145             success: function (data) {146                 if (data.indexOf("/Login/Login") >= 0) {147                     window.parent.location.href = '/Login/Login';148                 }149                 groupName = $("#groupName").val();150                 var state = $("#state").combobox("getValue");151                 url = "/SystemManage/OperatorGroup/OperatorGroupManage/OperatorGroupManage?groupName=" + groupName152                     + "&state=" + state;153 154                 alert(data);155 156                 reloadDatagrid(url, "dataGrid", "btn_submit", "无用户组数据返回!", "查询用户组数据出错!");157             },158             error: function (data) {159                 commErrorHandle(data, true, 'dataGrid', 'btn_submit', "操作出错!");160             }161         });162     });163 164 });
operatorGroupManage.js

1.5控制器

分组模块的控制器包含在分组域中,文件路径为Areas/SystemManage/OperatorGroup/Controller,控制器名称为OperatorGroupManageController.cs。控制器的完整代码如下:

1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 using System.Web.Mvc;  6 using Session;  7 using OdbcDbAccess;  8 using System.Data;  9 using Models; 10 using Controllers; 11 using LogInfo; 12  13 namespace CodeForMvcTest.Areas.SystemManage.Controllers 14 { 15     public class OperatorGroupManageController : BaseController 16     { 17         ///  18         /// **************************** 19         /// 功能:分组处理类 20         /// 作者:王令 21         /// 时间:2015-7-12 22         /// 邮箱:1129137758@qq.com 23         /// **************************** 24  25         public ActionResult OperatorGroupManage() 26         { 27             IList
groupList = GetOperatorGroup("", -1); 28 string[] propertyArray = { "GroupId", "GroupName", "OrderNum", "State" }; 29 30 ViewBag.GroupList = DataTransfor.ListToTableHtml(groupList, propertyArray); 31 32 return View(); 33 } 34 35 36 ///
37 /// 返回用户组查询结果列表 38 /// 39 ///
用户组名称 40 ///
状态 41 ///
42 [HttpPost] 43 public ActionResult OperatorGroupManage(string groupName, int state) 44 { 45 IList
groupList = GetOperatorGroup(groupName, state); 46 return Json(groupList); 47 } 48 49 ///
50 /// 修改用户组信息 51 /// 52 ///
用户组ID 53 ///
用户组名称 54 ///
排序值 55 ///
状态 56 ///
57 [HttpPost] 58 public ActionResult UpdateGroup(int groupId, string groupName, int orderNum, int state) 59 { 60 string sql = "update operatorgroup set groupname='" + groupName + "',ordernumber='" + orderNum + "',state='" + state + "' where groupid=" + groupId + ""; 61 try 62 { 63 SqlHelper.ExecuteNonQuery(SqlSeverConnectionName, sql); 64 Log.SaveOperatorLog(sql, 1, "成功修改用户组信息"); 65 66 return Content("成功修改用户组信息!"); 67 } 68 catch (Exception ex) 69 { 70 Log.SaveErrorLog(ex.ToString(), "修改用户组信息出错"); 71 return Content("修改用户组信息出错!"); 72 } 73 } 74 75 76 ///
77 /// 添加用户组 78 /// 79 ///
用户组名称 80 ///
排序值 81 ///
状态 82 ///
83 [HttpPost] 84 public ActionResult AddGroup(string groupName, int orderNum, int state) 85 { 86 string sql = "select count(*) as data from operatorgroup where groupname='" + groupName + "'"; 87 try 88 { 89 int count = SqlHelper.ExecuteScalar
(SqlSeverConnectionName, sql); 90 if (count > 0) 91 { 92 Log.SaveOperatorLog(sql, 0, "因用户组名称已经存在,未能成功添加用户组"); 93 return Content("已经存在相同名称的用户组!"); 94 } 95 sql = "insert into operatorgroup (groupname,ordernumber,state,updatetime,createtime) " 96 + "values ('" + groupName + "','" + orderNum + "','" + state + "','" 97 + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + 98 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "')"; 99 100 SqlHelper.ExecuteNonQuery(SqlSeverConnectionName, sql);101 102 Log.SaveOperatorLog(sql, 1, "成功添加用户组");103 return Content("添加成功!");104 }105 catch (Exception ex)106 {107 Log.SaveErrorLog(ex.ToString(), "添加用户组出错");108 return Content("添加用户组出错!");109 }110 }111 ///
112 /// 查询分组113 /// 114 ///
分组名称115 ///
状态116 ///
117 private IList
GetOperatorGroup(string groupName, int state)118 {119 IList
groupList = new List
();120 try121 {122 string sql = "select * from operatorgroup where 1=1";123 if (!string.IsNullOrEmpty(groupName))124 {125 sql += " and groupname='" + groupName + "'";126 }127 if (state != -1)128 {129 sql += " and state=" + state;130 }131 sql += " order by ordernumber";132 DataSet dataSet = SqlHelper.ExecuteQuery(SqlSeverConnectionName, sql);133 int[] columnArray = { 0, 1, 3, 4 };134 string[] propertyArray = { "GroupId", "GroupName", "OrderNum", "State" };135 groupList = DataTransfor.DataSetTransfor
(dataSet, columnArray,136 propertyArray);137 }138 catch (Exception ex)139 {140 Log.SaveErrorLog(ex.ToString(), "查询用户组出错");141 }142 return groupList;143 }144 145 146 }147 }
OperatorGroupManageController.cs

1.6界面运行截图

用户组管理主界面如下图所示:

添加用户组界面如下图所示:

编辑用户组界面如下图所示:

 

转载于:https://www.cnblogs.com/wlandwl/p/OperatorGROUP.html

你可能感兴趣的文章
工厂模式(Factory)
查看>>
Linux 虚拟地址与物理地址的映射关系分析【转】
查看>>
GNU make manual 翻译(三十七)
查看>>
自动化测试框架的搭建
查看>>
Linux 邮件服务器 之跟我一步一步来实现一个邮件系统【转】
查看>>
522,黑客情人节,向前辈吴恩达和姚期智学习如何撩妹
查看>>
Go语言入门——数组、切片和映射
查看>>
JS常用判断空对像的几种方法
查看>>
传统实体连锁店地位受到挑战 沃尔玛开设了sbf胜博智能零售实验室
查看>>
图解TCP协议中的三次握手和四次挥手
查看>>
iOS关于状态栏隐藏的问题(OC)
查看>>
隔壁幼儿园小朋友都比你会撩妹
查看>>
[译] 使用 Shadow DOM 封装样式和结构
查看>>
头发都快掉没了,才熬出来的优秀程序员的生存指北!
查看>>
基于Azkaban的任务定时调度实践
查看>>
《就是要你懂swoole》-- 起步
查看>>
【深入学习JVM 03】判断一个对象是否可回收
查看>>
【译】如何,以及何时使用CSS多列布局
查看>>
TODO 最适合练习主流框架的应用
查看>>
LeetCode 第 15 号问题:三数之和
查看>>