http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 15581|回复: 3

[教程] 【通用权限管理系统】角色管理>分配功能权限页面逻辑处理

[复制链接]
发表于 2018-1-17 16:44:59 | 显示全部楼层 |阅读模式
【通用权限管理系统】角色管理>分配功能权限页面逻辑处理


导读部分





教程部分


本帖子主要讲解权限管理>角色管理>分配功能权限的页面列表实现方法,稍后会在其它帖子中,详细讲解分配功能权限的保存方法实现。

1. 在角色管理中,点击分配权限按钮
1.png


2. 点击分配权限按钮后,出现分配功能权限的页面,本次主要讲解的就是分配功能权限页面的实现逻辑,如下图:
2.png

由此图可以看到,本次分配的功能权限信息,主要是给行政人员的角色分配,在页面的左上角,可以清晰的看到分配功能权限的角色信息。

一下是代码部分讲解:
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();
    })


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2018-1-17 17:38:52 | 显示全部楼层
功能权限的分配,是权限管理系统的一个重点,即各个页面中,不同的用户进入,不同按钮,部分由权限,部门没有权限
 楼主| 发表于 2018-1-17 17:39:33 | 显示全部楼层
一般用在页面逻辑比较复杂,内容比较多的页面,不同的用户,有不同的按钮使用权限
发表于 2018-1-18 09:13:39 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-3-28 19:20

© 2014-2021

快速回复 返回顶部 返回列表