分配模块

This commit is contained in:
yubaolee
2017-12-15 17:44:30 +08:00
parent 48db85f686
commit 277676cbba
10 changed files with 76 additions and 110 deletions

View File

@@ -58,7 +58,7 @@ namespace OpenAuth.App
set set
{ {
_user = value; _user = value;
_userRoleIds = UnitWork.Find<Relevance>(u => u.FirstId == _user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList(); _userRoleIds = UnitWork.Find<Relevance>(u => u.FirstId == _user.Id && u.Key == Define.USERROLE).Select(u => u.SecondId).ToList();
} }
} }

View File

@@ -2,6 +2,7 @@
{ {
public static class Define public static class Define
{ {
public static string USERROLE = "UserRole"; //用户角色关联KEY
public const string ROLERESOURCE= "RoleResource"; //角色资源关联KEY public const string ROLERESOURCE= "RoleResource"; //角色资源关联KEY
public const string USERRESOURCE = "UserResource"; //用户资源关联KEY public const string USERRESOURCE = "UserResource"; //用户资源关联KEY
public const string USERORG = "UserOrg"; //用户机构关联KEY public const string USERORG = "UserOrg"; //用户机构关联KEY

View File

@@ -6,6 +6,7 @@ namespace OpenAuth.App
{ {
public class ModuleManagerApp :BaseApp<Module> public class ModuleManagerApp :BaseApp<Module>
{ {
public RevelanceManagerApp RevelanceManagerApp { get; set; }
public void Add(Module model) public void Add(Module model)
{ {
ChangeModuleCascade(model); ChangeModuleCascade(model);
@@ -25,18 +26,25 @@ namespace OpenAuth.App
/// TODO:这里会加载用户及用户角色的所有模块,“为用户分配模块”功能会给人一种混乱的感觉,但可以接受 /// TODO:这里会加载用户及用户角色的所有模块,“为用户分配模块”功能会给人一种混乱的感觉,但可以接受
/// </summary> /// </summary>
/// <param name="userId">The user unique identifier.</param> /// <param name="userId">The user unique identifier.</param>
public List<Module> LoadForUser(string userId) public IEnumerable<Module> LoadForUser(string userId)
{ {
return null; var roleIds = RevelanceManagerApp.Get(Define.USERROLE, true, userId);
var moduleIds = UnitWork.Find<Relevance>(
u =>
(u.FirstId == userId && u.Key == Define.USERMODULE) ||
(u.Key == Define.ROLEMODULE && roleIds.Contains(u.FirstId))).Select(u => u.SecondId);
return UnitWork.Find<Module>(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo);
} }
/// <summary> /// <summary>
/// 加载特定角色的模块 /// 加载特定角色的模块
/// </summary> /// </summary>
/// <param name="roleId">The role unique identifier.</param> /// <param name="roleId">The role unique identifier.</param>
public List<Module> LoadForRole(string roleId) public IEnumerable<Module> LoadForRole(string roleId)
{ {
return null; var moduleIds = UnitWork.Find<Relevance>(u => u.FirstId == roleId && u.Key == Define.ROLEMODULE)
.Select(u => u.SecondId);
return UnitWork.Find<Module>(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo);
} }
#endregion / #endregion /

View File

@@ -68,7 +68,7 @@ namespace OpenAuth.App
{ {
//用户角色 //用户角色
var userRoleIds = var userRoleIds =
UnitWork.Find<Relevance>(u => u.FirstId == userId && u.Key == "UserRole").Select(u => u.SecondId).ToList(); UnitWork.Find<Relevance>(u => u.FirstId == userId && u.Key == Define.USERROLE).Select(u => u.SecondId).ToList();
//用户角色与自己分配到的角色ID //用户角色与自己分配到的角色ID
var moduleIds = var moduleIds =

View File

@@ -28,81 +28,7 @@ namespace OpenAuth.Mvc.Controllers
{ {
return View(); return View();
} }
//public ActionResult Assign(string firstId, string key)
//{
// ViewBag.FirstId = firstId;
// ViewBag.ModuleType = key;
// var moduleWithChildren = AuthUtil.GetCurrentUser().Modules
// .GenerateTree(u =>u.Id, u =>u.ParentId);
// var modules = key == Define.USERMODULE ? App.LoadForUser(firstId) : App.LoadForRole(firstId);
// CheckModule(moduleWithChildren, modules);
// ViewBag.Modules = BuilderModules(moduleWithChildren);
// return View();
//}
private void CheckModule(IEnumerable<TreeItem<ModuleView>> moduleWithChildren, List<Module> modules)
{
foreach (var module in moduleWithChildren)
{
if (module.Children.Any())
{
CheckModule(module.Children, modules);
}
if (modules.Select(u => u.Id).Contains(module.Item.Id))
{
module.Item.Checked = true;
}
}
}
public string BuilderModules(IEnumerable<TreeItem<ModuleView>> modules)
{
StringBuilder sb = new StringBuilder();
foreach (var moduleView in modules)
{
if (moduleView.Children.Any())
{
sb.Append("<fieldset class=\"layui-elem-field\">\r\n");
sb.Append("<legend>");
BuildCheckbox(sb, moduleView);
sb.Append("</legend>\r\n");
sb.Append("<div class=\"layui-field-box\">\r\n");
sb.Append(BuilderModules(moduleView.Children));
sb.Append("</div>\r\n");
sb.Append("</fieldset>\r\n");
//sb.Append("<div class=\"layui-form-item\">\r\n");
//BuildCheckbox(sb, moduleView);
//sb.Append("<div class=\"layui-input-block\">\r\n");
//sb.Append(BuilderModules(moduleView.Children));
//sb.Append("</div>\r\n");
//sb.Append("</div>\r\n");
}
else
{
BuildCheckbox(sb, moduleView);
}
}
return sb.ToString();
}
private void BuildCheckbox(StringBuilder sb, TreeItem<ModuleView> moduleView)
{
sb.Append("<input type=\"checkbox\" value=\"" + moduleView.Item.Id + "\" title=\"" + moduleView.Item.Name + "\"");
if (moduleView.Item.Checked)
{
sb.Append(" checked");
}
sb.Append(">\r\n");
}
/// <summary> /// <summary>
/// 加载用户模块 /// 加载用户模块
/// </summary> /// </summary>

View File

@@ -1,12 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using Infrastructure; using Infrastructure;
using OpenAuth.App; using OpenAuth.App;
using OpenAuth.Mvc.Models;
namespace OpenAuth.Mvc.Controllers namespace OpenAuth.Mvc.Controllers
{ {

View File

@@ -11,19 +11,15 @@
lay-filter="menulist" lay-size="sm"> lay-filter="menulist" lay-size="sm">
<thead> <thead>
<tr> <tr>
<th lay-data="{checkbox:true, fixed: true}"></th>
<th lay-data="{field:'Name', width:120, sort: true, fixed: true}">名称</th> <th lay-data="{field:'Name', width:120, sort: true, fixed: true}">名称</th>
<th lay-data="{field:'DomId', width:80}">DomId</th> <th lay-data="{field:'DomId', width:80}">DomId</th>
<th lay-data="{field:'Class', width:80}">样式</th> <th lay-data="{field:'Class', width:80}">样式</th>
<th lay-data="{field:'Icon', width:60,templet: '#miconTpl'}">图标</th> <th lay-data="{field:'Icon', width:60,templet: '#miconTpl'}">图标</th>
<th lay-data="{field:'SortNo', width:80}">排序号</th> <th lay-data="{field:'SortNo', width:80}">排序号</th>
<th lay-data="{fixed: 'right', width:80, align:'center', toolbar: '#menuBar'}"></th>
</tr> </tr>
</thead> </thead>
</table> </table>
<!--列表右边的按钮-->
<script type="text/html" id="menuBar">
<a class="layui-btn layui-btn-primary layui-btn-mini" lay-event="del">删除</a>
</script>
<script type="text/html" id="miconTpl"> <script type="text/html" id="miconTpl">
{{# if( d.Icon != null && d.Icon != ''){ }} {{# if( d.Icon != null && d.Icon != ''){ }}
<i class="layui-icon">{{ d.Icon }}</i> <i class="layui-icon">{{ d.Icon }}</i>

View File

@@ -1,12 +1,14 @@
layui.config({ layui.config({
base: "/js/" base: "/js/"
}).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth'], function () { }).use(['form','vue', 'ztree', 'layer', 'jquery', 'table','droptree','openauth','queryString'], function () {
var form = layui.form, var //layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
//layer = (parent == undefined || parent.layer === undefined )? layui.layer : parent.layer,
layer = layui.layer, layer = layui.layer,
$ = layui.jquery; $ = layui.jquery;
var table = layui.table; var table = layui.table;
var openauth = layui.openauth; var openauth = layui.openauth;
var id = $.getUrlParam("id"); //待分配的id
var type = $.getUrlParam("type"); //待分配的类型
var menuType = $.getUrlParam("menuType"); //待分配菜单的类型
//菜单列表 //菜单列表
var menucon = {}; //table的参数如搜索key点击tree的id var menucon = {}; //table的参数如搜索key点击tree的id
@@ -18,6 +20,21 @@ layui.config({
url: '/ModuleManager/LoadMenus', url: '/ModuleManager/LoadMenus',
where: menucon where: menucon
}); });
//监听列表checkbox,设置是否分配菜单
table.on('checkbox(menulist)', function (obj) {
var url = "/RelevanceManager/Assign";
if (!obj.checked) {
url = "/RelevanceManager/UnAssign";
}
$.post(url, { type: menuType, firstId: id, secIds: [obj.data.Id] }
, function (data) {
layer.msg(data.Message);
}
, "json");
});
//todo:如果该用户已经分配菜单了,则设置相应的状态
} }
//左边树状机构列表 //左边树状机构列表
@@ -25,7 +42,12 @@ layui.config({
var url = '/UserSession/QueryModuleList'; var url = '/UserSession/QueryModuleList';
var zTreeObj; var zTreeObj;
var setting = { var setting = {
view: { selectedMulti: false }, view: { selectedMulti: true },
check: {
enable: true,
chkStyle: "checkbox",
chkboxType: { "Y": "", "N": "" } //去掉勾选时级联
},
data: { data: {
key: { key: {
name: 'Name', name: 'Name',
@@ -41,6 +63,18 @@ layui.config({
callback: { callback: {
onClick: function (event, treeId, treeNode) { onClick: function (event, treeId, treeNode) {
menuList({ moduleId: treeNode.Id }); menuList({ moduleId: treeNode.Id });
},
onCheck: function (event, treeId, treeNode) {
var url = "/RelevanceManager/Assign";
if (!treeNode.checked) {
url = "/RelevanceManager/UnAssign";
}
$.post(url, { type: type, firstId: id, secIds: [treeNode.Id] }
, function (data) {
layer.msg(data.Message);
}
, "json");
} }
} }
}; };
@@ -48,6 +82,8 @@ layui.config({
$.getJSON(url, function (json) { $.getJSON(url, function (json) {
zTreeObj = $.fn.zTree.init($("#tree"), setting); zTreeObj = $.fn.zTree.init($("#tree"), setting);
zTreeObj.addNodes(null, json); zTreeObj.addNodes(null, json);
//todo:如果该用户已经分配模块了,则设置相应的状态
menuList({ moduleId: json[0].Id }); menuList({ moduleId: json[0].Id });
zTreeObj.expandAll(true); zTreeObj.expandAll(true);
}); });
@@ -57,15 +93,5 @@ layui.config({
reload: load reload: load
} }
}(); }();
//监听菜单表格内部按钮
table.on('tool(menulist)', function (obj) {
var data = obj.data;
if (obj.event === 'del') { //删除菜单
openauth.del("/moduleManager/delMenu",
data.Id,menuList);
}
});
//监听页面主按钮操作 end //监听页面主按钮操作 end
}) })

View File

@@ -146,13 +146,20 @@ layui.config({
mainList(); mainList();
} }
, btnAccessModule: function () { , btnAccessModule: function () {
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
if (data.length != 1) {
layer.msg("请选择要分配的角色");
return;
}
var index = layer.open({ var index = layer.open({
title: "为用户分配模块", title: "为用角色配模块",
type: 2, type: 2,
area: ['800px', '500px'], area: ['800px', '500px'],
content: "/ModuleManager/Assign", content: "/ModuleManager/Assign?type=RoleModule&menuType=RoleElement&id=" + data[0].Id,
success: function(layero, index) { success: function (layero, index) {
} }
}); });
} }

View File

@@ -146,11 +146,18 @@ layui.config({
mainList(); mainList();
} }
, btnAccessModule: function () { , btnAccessModule: function () {
var checkStatus = table.checkStatus('mainList')
, data = checkStatus.data;
if (data.length != 1) {
layer.msg("请选择要分配的用户");
return;
}
var index = layer.open({ var index = layer.open({
title: "为用户分配模块", title: "为用户分配模块",
type: 2, type: 2,
area: ['800px', '500px'], area: ['800px', '500px'],
content: "/ModuleManager/Assign", content: "/ModuleManager/Assign?type=UserModule&menuType=UserElement&id=" + data[0].Id,
success: function(layero, index) { success: function(layero, index) {
} }