diff --git a/OpenAuth.App/RoleManagerApp.cs b/OpenAuth.App/RoleManagerApp.cs index 7371e45a..6484b69c 100644 --- a/OpenAuth.App/RoleManagerApp.cs +++ b/OpenAuth.App/RoleManagerApp.cs @@ -39,7 +39,7 @@ namespace OpenAuth.App /// public dynamic Load(int orgId, int pageindex, int pagesize) { - if (pageindex < 1) pageindex = 1; //TODO:如果列表为空新增加一个用户后,前端会传一个0过来,奇怪?? + if (pageindex < 1) pageindex = 1; //TODO:如果列表为空新增加一个用户后,前端会传一个0过来,奇怪?? IEnumerable roles; int total = 0; if (orgId == 0) @@ -98,15 +98,15 @@ namespace OpenAuth.App public List LoadForOrgAndUser(int orgId, int userId) { - var roleIds = _repository.Find(u =>u.OrgId == orgId).ToList(); + var roleIds = _repository.Find(u => orgId == 0 || u.OrgId == orgId).ToList(); var rolevms = new List(); foreach (var role in roleIds) { RoleVM rolevm = role; rolevm.IsBelongUser = (_relevanceRepository.FindSingle(u => u.SecondId == role.Id - && u.FirstId == userId - && u.Key == "UserRole") - != null); + && u.FirstId == userId + && u.Key == "UserRole") + != null); rolevms.Add(rolevm); } return rolevms; @@ -114,9 +114,12 @@ namespace OpenAuth.App public void AccessRole(int userId, int[] roleIds) { - _relevanceRepository.DeleteBy("UserRole", userId); - _relevanceRepository.AddRelevance("UserRole", roleIds.ToLookup(roleId => userId)); } + + public void DelAccessRole(int userId, int[] roleids) + { + _relevanceRepository.DeleteBy("UserRole", roleids.ToLookup(roleId => userId)); + } } } \ No newline at end of file diff --git a/OpenAuth.Domain/Interface/IRelevanceRepository.cs b/OpenAuth.Domain/Interface/IRelevanceRepository.cs index 026a44b3..88aad5b4 100644 --- a/OpenAuth.Domain/Interface/IRelevanceRepository.cs +++ b/OpenAuth.Domain/Interface/IRelevanceRepository.cs @@ -20,6 +20,8 @@ namespace OpenAuth.Domain.Interface public interface IRelevanceRepository : IRepository { void DeleteBy(string key, params int[] firstIds); + void DeleteBy(string key, ILookup idMaps); + void AddRelevance( string key, ILookup idMaps); } } diff --git a/OpenAuth.Mvc/BllScripts/grid.js b/OpenAuth.Mvc/BllScripts/grid.js new file mode 100644 index 00000000..46907286 --- /dev/null +++ b/OpenAuth.Mvc/BllScripts/grid.js @@ -0,0 +1,44 @@ +// *********************************************************************** +// Assembly : OpenAuth.Mvc +// Author : yubaolee +// Created : 04-12-2016 +// +// Last Modified By : yubaolee +// Last Modified On : 04-12-2016 +// *********************************************************************** +// +// 版权所有(C) 2015 +// +// grid基类 +// *********************************************************************** + +function Grid() { + this.maingrid = undefined; + this.selectObjs = function () { + var selectedDatas = this.maingrid.data('selectedDatas'); + if (selectedDatas == undefined || selectedDatas.length == 0) { + $(this).alertmsg('warn', '至少选择一个对象'); + return null; + } + return selectedDatas; + }; +} + +//选择单行对象 +Grid.prototype.getSelectedObj = function () { + var selectedDatas = this.selectObjs(); + return selectedDatas == null ? null : selectedDatas[0]; +}; +//选择多行对象 +Grid.prototype.getSelectedMany = function () { + return this.selectObjs(); +}; +//返回选择多行的属性JSON,默认选择id属性,如果选择其他属性,可重写 +Grid.prototype.getSelectedProperties = function (propName) { + var selected = this.selectObjs(); + if (selected == null) return null; + + var ids = selected.map(function (elem) { return elem[propName]; }).join(","); + ids = '[' + ids + ']'; //拼成一个JSON + return ids; +}; \ No newline at end of file diff --git a/OpenAuth.Mvc/BllScripts/userRoleManager.js b/OpenAuth.Mvc/BllScripts/userRoleManager.js new file mode 100644 index 00000000..d6795619 --- /dev/null +++ b/OpenAuth.Mvc/BllScripts/userRoleManager.js @@ -0,0 +1,100 @@ +$(document).ready(function () { + $.CurrentDialog.find("#btnAccess").on("click", function () { + var ids = userRolesList.getSelectedProperties('Id'); + if (ids == null) return; + + $.post('/RoleManager/AccessRoles', { + userId: $('#userId').val(), + ids: ids + }, function (json) { + userRolesList.reload(); + }); + }); + $.CurrentDialog.find("#btnDelAccess").on("click", function () { + var ids = userRolesList.getSelectedProperties('Id'); + if (ids == null) return; + + $.post('/RoleManager/DelAccessRoles', { + userId: $('#userId').val(), + ids: ids + }, function (json) { + userRolesList.reload(); + }); + }); +}); + +//grid列表模块 +function UserRolesList() { + var selectedId = 0; //选中的ID + this.maingrid = $.CurrentDialog.find('#maingrid').datagrid({ + showToolbar: false, + filterThead: false, + target: $(this), + columns: [ + { + name: 'Id', + label: '角色ID', + hide: true + }, + { + name: 'Name', + label: '角色名称', + width: 100 + }, + { + name: 'OrgName', + label: '所属组织', + width: 100 + }, + { + name: 'IsBelongUser', + label: '是否已经授权', + type: 'select', + align: 'center', + items: [{ 'false': '未授权', 'true': '已授权' }], + width: 100 + } + ], + dataUrl: '/RoleManager/LoadForOrgAndUser?orgId=' + selectedId + '&userId=' + $('#userId').val(), + fullGrid: true, + showLinenumber: true, + showCheckboxcol: true, + paging: true, + filterMult: false, + showTfoot: false, + height: 'auto' + }); + this.reload = function (id) { + if (id != undefined) selectedId = id; + this.maingrid.datagrid('reload', { dataUrl: '/RoleManager/LoadForOrgAndUser?orgId=' + selectedId + '&userId=' + $('#userId').val() }); + } +}; +UserRolesList.prototype = new Grid(); +var userRolesList = new UserRolesList(); + +var ztree = function () { + var setting = { + view: { selectedMulti: false }, + data: { + key: { + name: 'Name', + title: 'Name' + }, + simpleData: { + enable: true, + idKey: 'Id', + pIdKey: 'ParentId', + rootPId: 'null' + } + }, + callback: { onClick: zTreeOnClick } + }; + $.getJSON('/OrgManager/LoadOrg', function (json) { + var zTreeObj = $.fn.zTree.init($.CurrentDialog.find("#tree"), setting, json); + zTreeObj.expandAll(true); + }); +}(); +function zTreeOnClick(event, treeId, treeNode) { + userRolesList.reload(treeNode.Id); +} +//@@ sourceURL=RoleLookup.js diff --git a/OpenAuth.Mvc/BllScripts/usermanager.js b/OpenAuth.Mvc/BllScripts/usermanager.js new file mode 100644 index 00000000..22b6f4da --- /dev/null +++ b/OpenAuth.Mvc/BllScripts/usermanager.js @@ -0,0 +1,241 @@ +// *********************************************************************** +// Assembly : OpenAuth.Mvc +// Author : yubaolee +// Created : 04-12-2016 +// +// Last Modified By : yubaolee +// Last Modified On : 04-12-2016 +// *********************************************************************** +// +// 版权所有(C) 2015 +// +// 用户管理前端模块 +// *********************************************************************** + +$(function () { +}); + +//ztree模块 +var ztree = function () { + var setting = { + view: { selectedMulti: false }, + data: { + key: { + name: 'Name', + title: 'Name' + }, + simpleData: { + enable: true, + idKey: 'Id', + pIdKey: 'ParentId', + rootPId: 'null' + } + }, + callback: { + onClick: function (event, treeId, treeNode) { + grid.reload(treeNode.Id); + } + } + }; + $.getJSON('/OrgManager/LoadOrg', function (json) { + var zTreeObj = $.fn.zTree.init($('#maintree'), setting, json); + zTreeObj.expandAll(true); + }); +}(); + +//grid列表模块 +var grid = function () { + var selectedId = 0; //选中的ID + var maingrid = $('#maingrid', '#detail').datagrid({ + showToolbar: false, + filterThead: false, + target: $(this), + columns: [ + { + name: 'Id', + label: 'Id', + attrs: { readonly: 'readonly' }, + hide: true + }, + { + name: 'Account', + label: '用户账号', + width: 142, + attrs: { readonly: 'readonly' } + }, + { + name: 'Name', + label: '姓名/昵称', + width: 226 + }, + { + name: 'Organizations', + label: '所属机构', + width: 150 + }, + { + name: 'Status', + label: '状态', + type: 'select', + align: 'center', + width: 80, + items: [{ '0': '正常' }, { '1': '禁用' }] + }, + { + name: 'Sex', + label: '性别', + type: 'select', + align: 'center', + width: 80, + items: [{ '0': '男' }, { '1': '女' }] + }, + { + name: 'CreateTime', + label: '登记日期', + type: 'date', + width: 180, + pattern: 'yyyy-MM-dd HH:mm:ss' + } + ], + dataUrl: '/UserManager/Load?orgId=' + selectedId, + fullGrid: true, + showLinenumber: true, + showCheckboxcol: true, + paging: true, + filterMult: false, + showTfoot: false, + height: 'auto' + }); + + return { + reload: function (id) { + if (id != undefined) selectedId = id; + maingrid.datagrid('reload', { dataUrl: '/UserManager/Load?orgId=' + selectedId }); + }, + getSelectedObj: function () { //选择单行 + var selectedDatas = maingrid.data('selectedDatas'); + if (selectedDatas == undefined || selectedDatas.length == 0) { + $(this).alertmsg('warn', '至少选择一个对象', { + displayMode: 'slide', + title: '重要提示' + }); + return null; + } + return selectedDatas[0]; + }, + getSelectedMany: function () { //选择多行 + return maingrid.data('selectedDatas'); + }, + }; +}(); + +//删除 +function delUser() { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $.getJSON('/UserManager/Delete?Id=' + selected.Id, function (data) { + if (data.statusCode == "200") + grid.reload(); + else { + $(this).alertmsg('warn', data.message); + } + }); +} + +//自定义的编辑按钮 +function editUser() { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(this).dialog({ + id: 'editDialog', + url: '/UserManager/Add?id=' + selected.Id, + title: '编辑', + onClose: function () { + grid.reload(); + } + }); +} + +function refreshUserGrid() { + grid.reload(); +} + +//用户模块授权按钮 +function openUserModuleAccess(obj) { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(obj).dialog({ + id: 'accessUserModule', + url: '/ModuleManager/LookupMultiForUser', + title: '为用户分配模块', + data: { + userId: selected.Id + } + }); +} + +//用户可见组织授权按钮 +function openUserOrgAccess(obj) { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(obj).dialog({ + id: 'accessUserOrg', + url: '/OrgManager/LookupMultiForUser', + title: '为用户分配可见部门', + data: { + userId: selected.Id + } + }); +} + +//用户角色授权 +function openUserRoleAccess(obj) { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(obj).dialog({ + id: 'accessUserRole', + url: '/RoleManager/LookupMulti', + title: '为用户分配角色', + width: 600, + height: 380, + data: { + userId: selected.Id + } + }); +} + +//为用户分配资源 +function openUserReourceAccess(obj) { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(obj).dialog({ + id: 'accessUserRole', + url: '/ResourceManager/LookupMultiForUser', + title: '为用户分配资源', + width: 600, + height: 380, + data: { + userId: selected.Id + } + }); +} + +//分配菜单 +function openAssignUserElement(obj) { + var selected = grid.getSelectedObj(); + if (selected == null) return; + + $(obj).dialog({ + id: 'assignElement', + url: '/ModuleElementManager/AssignForUser?userId=' + selected.Id, + title: '为用户分配菜单', + width: 700, + height: 380 + }); +} \ No newline at end of file diff --git a/OpenAuth.Mvc/Content/BJUI/themes/css/style.css b/OpenAuth.Mvc/Content/BJUI/themes/css/style.css index 5d912331..8353fe5d 100644 --- a/OpenAuth.Mvc/Content/BJUI/themes/css/style.css +++ b/OpenAuth.Mvc/Content/BJUI/themes/css/style.css @@ -357,7 +357,7 @@ td[align=right] input{text-align:right;} .bjui-datagrid .datagrid-box-h{overflow:hidden; border-bottom-style:solid; border-bottom-width:1px;} .bjui-datagrid .datagrid-box-f{overflow:hidden; border-top:1px #ddd solid; border-bottom:1px #ddd solid;} .bjui-datagrid .datagrid-box-f thead > tr > th{border-bottom-color:#ddd;} -.bjui-datagrid .datagrid-box-b{overflow:auto;} +.bjui-datagrid .datagrid-box-b{/* overflow:auto; */} .bjui-datagrid .datagrid-box-h .table > thead > tr:first-child > th{border-top-width:0;} .bjui-datagrid .datagrid-box-h .table > thead > tr > th{overflow:hidden; border-bottom-width:0; /*white-space:nowrap;*/} .bjui-datagrid .datagrid-box-h .table{border-bottom-width:0;} diff --git a/OpenAuth.Mvc/Controllers/RoleManagerController.cs b/OpenAuth.Mvc/Controllers/RoleManagerController.cs index c89edc40..12125e6b 100644 --- a/OpenAuth.Mvc/Controllers/RoleManagerController.cs +++ b/OpenAuth.Mvc/Controllers/RoleManagerController.cs @@ -85,11 +85,18 @@ namespace OpenAuth.Mvc.Controllers public string AccessRoles(int userId, string ids) { - var roleids = ids.Split(',').Select(id => int.Parse(id)).ToArray(); + var roleids = JsonHelper.Instance.Deserialize(ids); _app.AccessRole(userId, roleids); return JsonHelper.Instance.Serialize(BjuiResponse); } + public string DelAccessRoles(int userId, string ids) + { + var roleids = JsonHelper.Instance.Deserialize(ids); + _app.DelAccessRole(userId, roleids); + return JsonHelper.Instance.Serialize(BjuiResponse); + } + #endregion 为用户设置角色界面 } } \ No newline at end of file diff --git a/OpenAuth.Mvc/OpenAuth.Mvc.csproj b/OpenAuth.Mvc/OpenAuth.Mvc.csproj index 9968fcf5..9565d881 100644 --- a/OpenAuth.Mvc/OpenAuth.Mvc.csproj +++ b/OpenAuth.Mvc/OpenAuth.Mvc.csproj @@ -150,8 +150,11 @@ + + + diff --git a/OpenAuth.Mvc/Views/RoleManager/LookupMulti.cshtml b/OpenAuth.Mvc/Views/RoleManager/LookupMulti.cshtml index a1194aac..8eaa5757 100644 --- a/OpenAuth.Mvc/Views/RoleManager/LookupMulti.cshtml +++ b/OpenAuth.Mvc/Views/RoleManager/LookupMulti.cshtml @@ -1,18 +1,15 @@ -@{ - string _prefix = "assignRoleForUser"; - var _treeId = _prefix + "Tree"; - var _gridId = _prefix + "Grid"; - var _treeDetail = _prefix + "Detail"; -} -
+
@@ -21,106 +18,14 @@
-
    +
      -
      +
      +
      - \ No newline at end of file + + \ No newline at end of file diff --git a/OpenAuth.Mvc/Views/UserManager/Index.cshtml b/OpenAuth.Mvc/Views/UserManager/Index.cshtml index e3fda919..ec2d1105 100644 --- a/OpenAuth.Mvc/Views/UserManager/Index.cshtml +++ b/OpenAuth.Mvc/Views/UserManager/Index.cshtml @@ -9,229 +9,10 @@
        - -
        +
        - \ No newline at end of file + \ No newline at end of file diff --git a/OpenAuth.Repository/RelevanceRepository.cs b/OpenAuth.Repository/RelevanceRepository.cs index 334a7cc3..b78db1cd 100644 --- a/OpenAuth.Repository/RelevanceRepository.cs +++ b/OpenAuth.Repository/RelevanceRepository.cs @@ -12,6 +12,27 @@ namespace OpenAuth.Repository Delete(u => firstIds.Contains(u.FirstId) && u.Key == key); } + /// + /// 删除关联 + /// + /// 关联标识 + /// 关联的<firstId, secondId>数组 + public void DeleteBy(string key, ILookup idMaps) + { + foreach (var sameVals in idMaps) + { + foreach (var value in sameVals) + { + Delete(u =>u.Key == key && u.FirstId == sameVals.Key && u.SecondId == value); + } + } + } + + /// + /// 添加新的关联 + /// + /// 关联标识 + /// 关联的<firstId, secondId>数组 public void AddRelevance(string key, ILookup idMaps) { foreach (var sameVals in idMaps)