构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
距离上次发布22讲已经有少许日子了,真是太抱歉,最近年关项目比较急,时间太紧,没有时间发布.请大家见谅
接下来我们的目标是
- 角色组管理
- 角色组权限设置
- 用户管理
- 把角色组授权给用户
- 给用户分配角色组
所以最少我们还要讲多5讲才能结束这个管理系统,经过之前的样例程序,我们很熟悉这个套路了,如果你很喜欢这个系列,你可以为这种重复性的动作写一个简单的代码生成器,或者一套强大的T4模版,其实这2个我都有,而且也是刚写的,以后系统完善了,给发布出来。
是不是还可以呢,哈哈,T4我也写了一套,但毕竟还是没有winfrom来得方便。
接下来我们在之前做好的模块管理,在22讲中,添加角色组管理的记录和操作码,如图
目前我是需要添加这么多个操作码。回头就机械性的创建DAL层,BLL层,Model层,还有注入
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; namespace App.IDAL { public interface ISysRoleRepository { IQueryable<SysRole> GetList(DBContainer db); int Create(SysRole entity); int Delete(string id); int Edit(SysRole entity); SysRole GetById(string id); bool IsExist(string id); } } ISysRoleRepository
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; using App.IDAL; using System.Data; namespace App.DAL { public class SysRoleRepository : IDisposable,ISysRoleRepository { public IQueryable<SysRole> GetList(DBContainer db) { IQueryable<SysRole> list = db.SysRole.AsQueryable(); return list; } public int Create(SysRole entity) { using (DBContainer db = new DBContainer()) { db.SysRole.AddObject(entity); return db.SaveChanges(); } } public int Delete(string id) { using (DBContainer db = new DBContainer()) { SysRole entity = db.SysRole.SingleOrDefault(a => a.Id == id); if (entity != null) { db.SysRole.DeleteObject(entity); } return db.SaveChanges(); } } public int Edit(SysRole entity) { using (DBContainer db = new DBContainer()) { db.SysRole.Attach(entity); db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); return db.SaveChanges(); } } public SysRole GetById(string id) { using (DBContainer db = new DBContainer()) { return db.SysRole.SingleOrDefault(a => a.Id == id); } } public bool IsExist(string id) { using (DBContainer db = new DBContainer()) { SysRole entity = GetById(id); if (entity != null) return true; return false; } } public void Dispose() { } } } SysRoleRepository
using System; using System.Collections.Generic; using System.Linq; using System.Text; using App.Models; using App.Common; using App.Models.Sys; namespace App.IBLL { public interface ISysRoleBLL { List<SysRoleModel> GetList(ref GridPager pager, string queryStr); bool Create(ref ValidationErrors errors, SysRoleModel model); bool Delete(ref ValidationErrors errors, string id); bool Edit(ref ValidationErrors errors, SysRoleModel model); SysRoleModel GetById(string id); bool IsExist(string id); } } ISysRoleBLL
using System; using System.Collections.Generic; using System.Linq; using Microsoft.Practices.Unity; using App.Models; using App.Common; using System.Transactions; using App.Models.Sys; using App.IBLL; using App.IDAL; using App.BLL.Core; namespace App.BLL { public class SysRoleBLL : BaseBLL, ISysRoleBLL { [Dependency] public ISysRoleRepository m_Rep { get; set; } public List<SysRoleModel> GetList(ref GridPager pager, string queryStr) { IQueryable<SysRole> queryData = null; if (!string.IsNullOrWhiteSpace(queryStr)) { queryData = m_Rep.GetList(db).Where(a => a.Name.Contains(queryStr)); } else { queryData = m_Rep.GetList(db); } pager.totalRows = queryData.Count(); queryData = LinqHelper.SortingAndPaging(queryData, pager.sort, pager.order, pager.page, pager.rows); return CreateModelList(ref queryData); } private List<SysRoleModel> CreateModelList(ref IQueryable<SysRole> queryData) { List<SysRoleModel> modelList = new List<SysRoleModel>(); foreach (var r in queryData) { modelList.Add(new SysRoleModel() { Id = r.Id, Name = r.Name, Description = r.Description, CreateTime = r.CreateTime, CreatePerson = r.CreatePerson, UserName = "" }); } return modelList; } public bool Create(ref ValidationErrors errors, SysRoleModel model) { try { SysRole entity = m_Rep.GetById(model.Id); if (entity != null) { errors.Add(Suggestion.PrimaryRepeat); return false; } entity = new SysRole(); entity.Id = model.Id; entity.Name = model.Name; entity.Description = model.Description; entity.CreateTime = model.CreateTime; entity.CreatePerson = model.CreatePerson; if (m_Rep.Create(entity) == 1) { //分配给角色 db.P_Sys_InsertSysRight(); //清理无用的项 db.P_Sys_ClearUnusedRightOperate(); return true; } else { errors.Add(Suggestion.InsertFail); return false; } } catch (Exception ex) { errors.Add(ex.Message); ExceptionHander.WriteException(ex); return false; } } public bool Delete(ref ValidationErrors errors, string id) { try { if (m_Rep.Delete(id) == 1) { return true; } else { return false; } } catch (Exception ex) { errors.Add(ex.Message); ExceptionHander.WriteException(ex); return false; } } public bool Edit(ref ValidationErrors errors, SysRoleModel model) { try { SysRole entity = m_Rep.GetById(model.Id); if (entity == null) { errors.Add(Suggestion.Disable); return false; } entity.Id = model.Id; entity.Name = model.Name; entity.Description = model.Description; entity.CreateTime = model.CreateTime; entity.CreatePerson = model.CreatePerson; if (m_Rep.Edit(entity) == 1) { return true; } else { errors.Add(Suggestion.EditFail); return false; } } catch (Exception ex) { errors.Add(ex.Message); ExceptionHander.WriteException(ex); return false; } } public bool IsExists(string id) { if (db.SysRole.SingleOrDefault(a => a.Id == id) != null) { return true; } return false; } public SysRoleModel GetById(string id) { if (IsExist(id)) { SysRole entity = m_Rep.GetById(id); SysRoleModel model = new SysRoleModel(); model.Id = entity.Id; model.Name = entity.Name; model.Description = entity.Description; model.CreateTime = entity.CreateTime; model.CreatePerson = entity.CreatePerson; return model; } else { return null; } } public bool IsExist(string id) { return m_Rep.IsExist(id); } } } SysRoleBLL
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.DataAnnotations; namespace App.Models.Sys { public class SysRoleModel { public string Id { get; set; } [Display(Name = "角色名称")] public string Name { get; set; } [Display(Name = "说明")] public string Description { get; set; } [Display(Name = "创建时间")] public DateTime CreateTime { get; set; } [Display(Name = "创建人")] public string CreatePerson { get; set; } [Display(Name = "拥有的用户")] public string UserName { get; set; }//拥有的用户 public string Flag { get; set; }//用户分配角色 } } SysRoleModel
using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using App.Common; using App.Models; using Microsoft.Practices.Unity; using App.IBLL; using App.Models.Sys; namespace App.Admin.Controllers { public class SysRoleController : BaseController { // // GET: /SysRole/ [Dependency] public ISysRoleBLL m_BLL { get; set; } ValidationErrors errors = new ValidationErrors(); [SupportFilter] public ActionResult Index() { ViewBag.Perm = GetPermission(); return View(); } [SupportFilter(ActionName="Index")] public JsonResult GetList(GridPager pager,string queryStr) { List<SysRoleModel> list = m_BLL.GetList(ref pager, queryStr); var json = new { total = pager.totalRows, rows = (from r in list select new SysRoleModel() { Id = r.Id, Name = r.Name, Description = r.Description, CreateTime = r.CreateTime, CreatePerson = r.CreatePerson, UserName = r.UserName }).ToArray() }; return Json(json); } #region 创建 [SupportFilter] public ActionResult Create() { ViewBag.Perm = GetPermission(); return View(); } [HttpPost] [SupportFilter] public JsonResult Create(SysRoleModel model) { model.Id = ResultHelper.NewId; model.CreateTime = ResultHelper.NowTime; if (model != null && ModelState.IsValid) { if (m_BLL.Create(ref errors, model)) { LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name, "成功", "创建", "SysRole"); return Json(JsonHandler.CreateMessage(1, Suggestion.InsertSucceed)); } else { string ErrorCol = errors.Error; LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name + "," + ErrorCol, "失败", "创建", "SysRole"); return Json(JsonHandler.CreateMessage(0, Suggestion.InsertFail + ErrorCol)); } } else { return Json(JsonHandler.CreateMessage(0, Suggestion.InsertFail)); } } #endregion #region 修改 [SupportFilter] public ActionResult Edit(string id) { ViewBag.Perm = GetPermission(); SysRoleModel entity = m_BLL.GetById(id); return View(entity); } [HttpPost] [SupportFilter] public JsonResult Edit(SysRoleModel model) { if (model != null && ModelState.IsValid) { if (m_BLL.Edit(ref errors, model)) { LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name, "成功", "修改", "SysRole"); return Json(JsonHandler.CreateMessage(1, Suggestion.EditSucceed)); } else { string ErrorCol = errors.Error; LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name + "," + ErrorCol, "失败", "修改", "SysRole"); return Json(JsonHandler.CreateMessage(0, Suggestion.EditFail + ErrorCol)); } } else { return Json(JsonHandler.CreateMessage(0, Suggestion.EditFail)); } } #endregion #region 详细 [SupportFilter] public ActionResult Details(string id) { ViewBag.Perm = GetPermission(); SysRoleModel entity = m_BLL.GetById(id); return View(entity); } #endregion #region 删除 [HttpPost] [SupportFilter] public JsonResult Delete(string id) { if (!string.IsNullOrWhiteSpace(id)) { if (m_BLL.Delete(ref errors, id)) { LogHandler.WriteServiceLog(GetUserId(), "Id:" + id, "成功", "删除", "SysRole"); return Json(JsonHandler.CreateMessage(1, Suggestion.DeleteSucceed)); } else { string ErrorCol = errors.Error; LogHandler.WriteServiceLog(GetUserId(), "Id" + id + "," + ErrorCol, "失败", "删除", "SysRole"); return Json(JsonHandler.CreateMessage(0, Suggestion.DeleteFail + ErrorCol)); } } else { return Json(JsonHandler.CreateMessage(0, Suggestion.DeleteFail)); } } #endregion } } SysRoleController
@using App.Admin; @using App.Common; @using App.Models.Sys; @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Index_Layout.cshtml"; List<permModel> perm = (List<permModel>)ViewBag.Perm; if (perm == null) { perm = new List<permModel>(); } } <div class="mvctool"> <input id="txtQuery" type="text" class="searchText"/> @Html.ToolButton("btnQuery", "icon-search", "查询", perm, "Query", true) @Html.ToolButton("btnCreate", "icon-add", "新增", perm, "Create", true) @Html.ToolButton("btnEdit", "icon-edit", "编辑", perm, "Edit", true) @Html.ToolButton("btnDetails", "icon-details", "详细", perm, "Details", true) @Html.ToolButton("btnDelete", "icon-remove", "删除", perm, "Delete", true) @Html.ToolButton("btnAllot", "icon-share", "分配用户", perm, "Allot", true) </div> <div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"></div> <table id="List"></table> <script type="text/javascript"> $(function () { $('#List').datagrid({ url: '@Url.Action("GetList")', width: $(window).width() - 10, methord: 'post', height: $(window).height() - 35, fitColumns: true, sortName: 'CreateTime', sortOrder: 'desc', idField: 'Id', pageSize: 15, pageList: [15, 20, 30, 40, 50], pagination: true, striped: true, //奇偶行是否区分 singleSelect: true,//单选模式 //rownumbers: true,//行号 columns: [[ { field: 'Id', title: 'ID', width: 80, hidden: true }, { field: 'Name', title: '角色名称', width: 80, sortable: true }, { field: 'Description', title: '说明', width: 80, sortable: true }, { field: 'CreateTime', title: '创建时间', width: 80, sortable: true }, { field: 'CreatePerson', title: '创建人', width: 80, sortable: true }, { field: 'UserName', title: '属下管理员', width: 80, sortable: true } ]] }); }); //ifram 返回 function frameReturnByClose() { $("#modalwindow").window('close'); } function frameReturnByReload(flag) { if (flag) $("#List").datagrid('load'); else $("#List").datagrid('reload'); } function frameReturnByMes(mes) { $.messageBox5s('提示', mes); } $(function () { $("#btnExport").click(function () { $("#modalwindow").html("<iframe width='100%' height='98%' scrolling='no' frameborder='0'' src='/SysHelper/ReportControl'></iframe>"); $("#modalwindow").window({ title: '导出', width: 320, height: 200, iconCls: 'icon-add' }).window('open'); }); $("#btnCreate").click(function () { $("#modalwindow").html("<iframe width='100%' height='98%' scrolling='no' frameborder='0'' src='/SysRole/Create'></iframe>"); $("#modalwindow").window({ title: '新增', width: 700, height: 400, iconCls: 'icon-add' }).window('open'); }); $("#btnEdit").click(function () { var row = $('#List').datagrid('getSelected'); if (row != null) { $("#modalwindow").html("<iframe width='100%' height='99%' frameborder='0' src='/SysRole/Edit?id=" + row.Id + "&Ieguid=" + GetGuid() + "'></iframe>"); $("#modalwindow").window({ title: '编辑', width: 700, height: 430, iconCls: 'icon-edit' }).window('open'); } else { $.messageBox5s('提示', '@Suggestion.PlaseChooseToOperatingRecords'); } }); $("#btnDetails").click(function () { var row = $('#List').datagrid('getSelected'); if (row != null) { $("#modalwindow").html("<iframe width='100%' height='98%' scrolling='no' frameborder='0' src='/SysRole/Details?id=" + row.Id + "&Ieguid=" + GetGuid() + "'></iframe>"); $("#modalwindow").window({ title: '详细', width: 500, height: 300, iconCls: 'icon-details' }).window('open'); } else { $.messageBox5s('提示', '@Suggestion.PlaseChooseToOperatingRecords'); } }); $("#btnQuery").click(function () { var queryStr = $("#txtQuery").val(); if (queryStr == null) { queryStr = "%"; } $('#List').datagrid({ url: '@Url.Action("GetList")?queryStr=' + encodeURI(queryStr) }); }); $("#btnDelete").click(function () { var row = $('#List').datagrid('getSelected'); if (row != null) { $.messager.confirm('提示', '@Suggestion.YouWantToDeleteTheSelectedRecords', function (r) { if (r) { $.post("@Url.Action("Delete")?id=" + row.Id, function (data) { if (data.type == 1) $("#List").datagrid('load'); $.messageBox5s('提示', data.message); }, "json"); } }); } else { $.messageBox5s('提示', '@Suggestion.PlaseChooseToOperatingRecords'); } }); $("#btnAllot").click(function () { }); }); </script> @Html.Partial("~/Views/Shared/_Partial_AutoGrid.cshtml") Index
<!--自动GRID 从第一次加载与重置窗体大小时候发生的事件:分部视图,当只有一个Grid时且ID为List--> <script type="text/javascript"> $(function () { $(window).resize(function () { $('#List').datagrid('resize', { width: $(window).width() - 10, height: SetGridHeightSub(39) }).datagrid('resize', { width: $(window).width() - 10, height: SetGridHeightSub(39) }); }); }); </script> _Partial_AutoGrid.cshtml
我们注重的是效果,看下
由于我们的用户管理还没做,分配还不能做,所以就先给个空的值吧。
我们能够这么机械性全靠我们的架构,才能这么清晰的分析问题。
做了这么久不知道大家有没有发现,层层扣层层,异常捕获,异常记录,日志记录,反转控制,系统的可维护性非常的高,一目了然,这也是发布文章这么久,没人质疑这个架构的所在之处(我们是不是应该自豪一下)
上面的图已经好了,关于记录,那必须是要有新增修改功能了,这个留给大家自己动手做做,因为这节是没有好讲的,这是为了下一节的,权限设置做铺垫而已。
谢谢大家