【通用权限管理系统】角色管理>分配功能权限页面逻辑处理 导读部分
教程部分
本帖子主要讲解权限管理>角色管理>分配功能权限的页面列表实现方法,稍后会在其它帖子中,详细讲解分配功能权限的保存方法实现。
1. 在角色管理中,点击分配权限按钮
2. 点击分配权限按钮后,出现分配功能权限的页面,本次主要讲解的就是分配功能权限页面的实现逻辑,如下图:
由此图可以看到,本次分配的功能权限信息,主要是给行政人员的角色分配,在页面的左上角,可以清晰的看到分配功能权限的角色信息。
一下是代码部分讲解: 1. 分配菜单按钮的html实现如下: [C#] 纯文本查看 复制代码 <td><a href="/Sys/RoleFunction.aspx?roleId=<%=roleInfo.RoleID %>&name=<%=roleInfo.Name %>" class="btn btn-success btn-small">分配权限</a></td>
此处可以看到,主要是个a链接,在链接中有两个参数,roleId(角色id),(角色名称)name(角色名称) 此两个参数,主要是在分配功能权限页面使用
2. 分配功能权限页面cs逻辑实现如下: 1. 参数实例化 [C#] 纯文本查看 复制代码 private Sys_RoleFunctionBLL sys_roleFuncBll = new Sys_RoleFunctionBLL();
protected int roleId = 0;
protected string roleName = string.Empty;
protected List<Sys_FunctionInfo> parentList = new List<Sys_FunctionInfo>();
protected List<Sys_FunctionInfo> sonList = new List<Sys_FunctionInfo>();
protected List<int> nowFncIds = new List<int>();
2. Page_Load 中页面数据绑定实现如下: [C#] 纯文本查看 复制代码 protected void Page_Load(object sender, EventArgs e)
{
// 权限判断,没有权限,直接返回
if (!LoginUser.IsAssignPermission(11))
{
Response.Write("您暂无分配功能信息的权限");
Response.End();
return;
}
var action = this.Request.Params["action"];
roleId = InputHelper.GetInputInt(this.Request.Params["roleId"]);
roleName = this.Request.Params["name"];
if (string.IsNullOrWhiteSpace(action))
{
//初始化 加载数据
/*
* 1. 获取当前角色下所有权限
* 2. 获取所有权限信息列表
* 3. 获取所有存在权限的主菜单列表
*/
// 获取当前角色下所有权限
var roleFuncList = sys_roleFuncBll.GetList("*", string.Format("RoleID = {0}", roleId), "FunctionID");
if (roleFuncList != null && roleFuncList.Any())
{
nowFncIds = roleFuncList.Select(r => r.FunctionID).ToList();
}
// 获取当前所有的权限功能信息
Sys_FunctionBLL sys_funcBll = new Sys_FunctionBLL();
var funcList = sys_funcBll.GetList("*", "1=1", "ID" );
//获取所有主项列表
parentList = funcList.Where( f => f.ParentId == 0 ).ToList();
// 获取所有的二级权限功能信息
sonList = funcList.Where( f => f.ParentId != 0 ).ToList();
}
}
在此处可以看到,添加了是否有权限的限制,即代码: [C#] 纯文本查看 复制代码 // 权限判断,没有权限,直接返回
if (!LoginUser.IsAssignPermission(11))
{
Response.Write("您暂无分配功能信息的权限");
Response.End();
return;
}
如果没有权限,页面会直接输出,在页面上显示如下内容: ‘您暂无分配功能信息的权限’
在Page_Load中,页面初始化数据,绘制页面html需要的数据处理如下: [C#] 纯文本查看 复制代码 if (string.IsNullOrWhiteSpace(action))
{
//初始化 加载数据
/*
* 1. 获取当前角色下所有权限
* 2. 获取所有权限信息列表
* 3. 获取所有存在权限的主菜单列表
*/
// 获取当前角色下所有权限
var roleFuncList = sys_roleFuncBll.GetList("*", string.Format("RoleID = {0}", roleId), "FunctionID");
if (roleFuncList != null && roleFuncList.Any())
{
nowFncIds = roleFuncList.Select(r => r.FunctionID).ToList();
}
// 获取当前所有的权限功能信息
Sys_FunctionBLL sys_funcBll = new Sys_FunctionBLL();
var funcList = sys_funcBll.GetList("*", "1=1", "ID" );
//获取所有主项列表
parentList = funcList.Where( f => f.ParentId == 0 ).ToList();
// 获取所有的二级权限功能信息
sonList = funcList.Where( f => f.ParentId != 0 ).ToList();
}
主要为如上代码中所述的3步
* 1. 获取当前角色下所有权限 * 2. 获取所有权限信息列表 * 3. 获取所有存在权限的主菜单列表 详细代码如上。
分配功能权限,页面html如下: [C#] 纯文本查看 复制代码 <div class="si-main">
<div class="si-block">
<div class="si-form">
<table class="table-form table">
<tbody>
<tr>
<td align="left"><h4><%=roleName %></h4></td>
</tr>
</tbody>
</table>
<table class="table table-page" id="grid">
<thead>
<tr>
<td align="center" style="width:30%">功能父类名称</td>
<td align="center" style="width:20%">操作</td>
<td align="center" style="width:50%">功能列表(勾选二级导航时请务必勾选它所在的主导航,否则系统将不会显示,切记)</td>
</tr>
</thead>
<tbody>
<%foreach (var info in parentList)
{ %>
<tr >
<td align="center">
<label for="like<%=info.ID %>" class="form-check" data-scheck>
<input type="checkbox" id="like<%=info.ID %>" name="like" value="<%=info.ID %>"
<%=(nowFncIds.Contains(info.ID) ? "checked=\"checked\"" : string.Empty ) %> data-value=<%=info.ID %>>
<span class="check-icons"><i class="icon icon-check"></i> <i class="icon icon-uncheck">
</i> </span><%=info.FunctionName %>
</label>
</td>
<td align="center">
<a href="javascript:;" class="toggle" >查看|设置权限</a>
</td>
<td>
<%var funcList = sonList.Where(m => m.ParentId == info.ID); %>
<ul id="UL<%=info.ID %>" style="display:none">
<%if( sonList != null && sonList.Any() ){
foreach (var func in funcList)
{%>
<li>
<label for="Checkbox<%=func.ID %>" class="form-check" data-scheck>
<input type="checkbox" id="Checkbox<%=func.ID %>" name="menuChild" value="<%=func.ID %>" <%=(nowFncIds.Contains(func.ID) ? "checked=\"checked\"" : string.Empty ) %> data-value="<%=func.ID %>"/>
<span class="check-icons"><i class="icon icon-check"></i> <i class="icon icon-uncheck">
</i> </span><%=func.FunctionName%>
</label>
</li>
<%}}%>
</ul>
</td>
</tr>
<%
} %>
<tr>
<td colspan="3" align="center">
</td>
</tr>
<tr>
<td colspan="3" align="center">
<button class="btn btn-primary" id="btnSave">保存</button>
<button class="btn btn-cancel" id="btnCancle">取消</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
实现效果如下所示:
获取所有功能权限信息,并将该角色原有的功能权限信息选中
点击查看|设置权限按钮,展开子菜单js如下: [C#] 纯文本查看 复制代码 $('#grid').on('click', '.toggle', function () {
var $this = $(this);
$this.parent().next().find('ul').toggle();
$this.parents('tr').siblings().find('ul').hide();
}) |