使用DTree树实现权限控制(权限的赋予、修改)---个人感觉蛮好用的

步骤一.引入DTree树编写后台方法:检查某个角色是否有某个功能、根据角色id批量删除权限、根据角色id批量插入权限

步骤二.在角色列表中的编辑的设置权限链接中,链接到修改角色权限修改页面ModifyRole.aspx,并且传入角色id;

步骤三.在修改页面设置如下:

前台:

<formid="frmRoleRight"action="ModifyRoleAction.aspx">

       <divid="divTree"style="text-align:left;width:180px;"></div>

       <asp:LiteralID="litTreeJS"runat="server"></asp:Literal>

<inputtype="hidden"id="hfRoleId"name="hiddenRoleId"  runat="server"/>                              

</form>

其中:form表单中设置为提交到角色修改代码 编写页面ModifyRoleAction.asxp;Literal字段加载后台的js代码;隐藏字段则存放当前角色id.

后台:(应注意路径问题)

      protectedvoidPage_Load(objectsender, EventArgse)

        {

            if (!IsPostBack)

            {

                stringid=GetRequestId();

                inti_id;

                if (!string.IsNullOrEmpty(id) &&int.TryParse(id, outi_id))

                {

                    Models.Sys_rolerole=BLL.Sys_roleManager.GetSys_roleById(i_id);

                    if (role!=null)

                    {

                        litRoleName.Text=role.Role_name;

                    }

                    hfRoleId.Value=id;

                }

                litTreeJS.Text=string.Format("{0}<script type='text/javascript'>{1}</script>", GetTreeRelJsorCss(), GetTreeHeader() +GetTreeBody() +GetTreeFooter());

 

            }

        }

 

        privatestringGetRequestId()

        {

            stringid=Request.QueryString["id"];

            returnid;

        }

        //获取js树尾部

        privatestringGetTreeFooter()

        {

            //将Dtree树添加到层divTree中

            returnstring.Format("document.getElementById('{0}').innerHTML=tree;", "divTree");

        }

        //得到dtree js 的主体节点代码

        privatestringGetTreeBody()

        {

            StringBuildersb=newStringBuilder();

            //得到所以父节点

            IList<Models.Sys_right>rights=BLL.Sys_rightManager.GetSysRoleRightOne();

            foreach (Models.Sys_rightrightinrights)

            {

                intflag=BLL.Sys_role_rightManager.CheckRoleRight(int.Parse(GetRequestId()), right.Id) ==true?1 : 2;

                sb.AppendFormat("tree.add('{0}','0','{1}','','','',{2},'{3}','{4}');", right.Id, right.Right_text, flag, BaseUrl() +"customerImg/CloseTree.gif", BaseUrl() +"customerImg/OpenTree.gif");

                //根据父节点id添加子节点

                sb.Append(GetSubRoleRight(right.Id));

            }

            returnsb.ToString();

        }

        //根据父节点id递归得到子节点

        privatestringGetSubRoleRight(intparentId)

        {

            StringBuildersb=newStringBuilder();

            //得到所以父节点

            IList<Models.Sys_right>rights=BLL.Sys_rightManager.GetSysRoleRightByParentId(parentId.ToString());

            foreach (Models.Sys_rightrightinrights)

            {

                //function Node(id, pid, name, url, title, target,flag, icon, iconOpen, open)

                //flag:0代表无复选框,1代表有复选框且选中,2代表有复选框未选中

                /*

                 * 这里查看某个角色有哪些功能,通过设置flag:

                 * 当flag=0时表示该角色没有该功能;

                 * 当flag=1时表示该角色有该功能。

                 */

                intflag=BLL.Sys_role_rightManager.CheckRoleRight(int.Parse(GetRequestId()),right.Id)==true?1:2;

                sb.AppendFormat("tree.add('{0}','{1}','{2}','','','',{3},'{4}','{5}');", right.Id, parentId, right.Right_text, flag, BaseUrl() +"customerImg/CloseTree.gif",BaseUrl() +"customerImg/OpenTree.gif");

               sb.Append( GetSubRoleRight(right.Id));

            }

            returnsb.ToString();

        }

        //获取js树头部

        privatestringGetTreeHeader()

        {

            StringBuildersb=newStringBuilder();

            sb.AppendFormat("tree=new dTree('tree','{0}');", BaseUrl());

            //设置同一时间只能有一个节点展开

            sb.Append("tree.config.closeSameLevel=true;");

            //设置DTree树的根节点

            sb.Append("tree.add('0','-1','MyHR','','','',2);");

            returnsb.ToString();

        }

        //获取前台js引用或Css引用

        privatestringGetTreeRelJsorCss()

        {

            stringjs=string.Format("<script type='text/javascript' src='{0}'></script>", BaseUrl() +"dtree.js");

            stringCss=string.Format("<link href='{0}' rel='stylesheet' type='text/css' />", BaseUrl() +"dtree.css");

            returnjs+Css;

        }

        //通用路径

        privatestringBaseUrl()

        {

            return"http://www.cnblogs.com/../dtree/";

        }

步骤四. 在角色修改代码 编写页面ModifyRoleAction.asxp进行代码编写:(要注意排除无意义的根节点)

protectedvoidPage_Load(objectsender, EventArgse)

        {

            //获取提交过来的角色id和权限ids

            stringrightIds=Request.QueryString["right"];

            stringroleId=Request.QueryString["hfRoleId"];

            string[] rights=rightIds.Split(',');

            IList<string>Rf_right_nos=newList<string>();

           foreach(stringrightinrights)

           {

               //排除无意义的根节点,

               if(right!="0")

               Rf_right_nos.Add(right);

           }

           if (BLL.Sys_role_rightManager.ModifyRoleRight(int.Parse(roleId), Rf_right_nos))

           {

               Response.Redirect("sysRoleList.aspx");

           }

           else

           {

               Utility.Tool.Alert("修改权限失败!", this.Page);

           }

        }

转载于:https://www.cnblogs.com/yinxiaofeng/archive/2012/08/17/2644738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值