MyOffice项目中的 "权限分配"

角色管理页面: RoleManage.aspx

 

如图:RoleManage.jpg

 

点击"分配权限"进入AdmeasureRole.aspx

如图:AdmeasureRole.jpg

 

分析AdmeasureRole.aspx页面结构


如图:AdmeasureRole01.jpg

-----------------AdmeasureRole.aspx-----------------------
主要源码:
     </div>
         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                  <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
            <ItemTemplate>
                <uc1:RoleRight ID="RoleRight1" runat="server" ParentId='<%#Eval("NodeId") %>' RoleId="<%#RoleId %>" />
            </ItemTemplate>
        </asp:DataList>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyOfficeConnectionString %>"
            SelectCommand="SELECT * FROM [SysFun] WHERE ([ParentNodeId] = @ParentNodeId)">
            <SelectParameters>
                <asp:Parameter DefaultValue="0" Name="ParentNodeId" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>

        </ContentTemplate>
         </asp:UpdatePanel>

        <asp:Button ID="btnSave" runat="server" Text="保存" Width="70px" OnClick="btnSave_Click" />
        &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
        <asp:Button ID="btnExit" runat="server" Text="取消" Width="70px" />
      </div>

后台代码:
 public string RoleId
    {
        get
        {
            int roleId = 0;
            if (Request.Params["RoleId"] != null)
            {
                 roleId= Convert.ToInt32(Request.Params["RoleId"]);
            }
            return roleId.ToString();
        }
    }

-------------------------------用户控件 RoleRight.ascx------------------


如图:AdmeasureRole02.jpg

-----------------------主要源码:

    <asp:CheckBoxList ID="CheckBoxList1" runat="server" DataSourceID="SqlDataSource1"
    DataTextField="DisplayName" DataValueField="NodeId" OnDataBound="CheckBoxList1_DataBound" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
</asp:CheckBoxList>
<asp:CheckBoxList ID="CheckBoxList2" runat="server" DataSourceID="SqlDataSource2"
    DataTextField="DisplayName" DataValueField="NodeId" RepeatDirection="Horizontal" OnDataBound="CheckBoxList2_DataBound" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList2_SelectedIndexChanged">
</asp:CheckBoxList>
<hr />
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyOfficeConnectionString %>"
    SelectCommand="SELECT * FROM [SysFun] WHERE ([NodeId] = @NodeId)">
    <SelectParameters>
        <asp:ControlParameter ControlID="hfParentId" Name="NodeId" PropertyName="Value" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:MyOfficeConnectionString %>"
    SelectCommand="SELECT * FROM [SysFun] WHERE ([ParentNodeId] = @ParentNodeId)">
    <SelectParameters>
        <asp:ControlParameter ControlID="hfParentId" Name="ParentNodeId" PropertyName="Value"
            Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
<asp:HiddenField ID="hfParentId" runat="server" />
<asp:HiddenField ID="hfRoleId" runat="server" />

 

---------------------------后台代码:
  public string ParentId
    {
        get
        {
            return hfParentId.Value;

        }
        set
        {
            hfParentId.Value = value;
        }
    }
    public string RoleId
    {
        get
        {
            return hfRoleId.Value;
        }
        set
        {
            hfRoleId.Value = value;
        }
       
    }

    IList<RoleRight> rrList = null;
    protected void CheckBoxList1_DataBound(object sender, EventArgs e)
    {
         int roleId = Convert.ToInt32(RoleId);
         rrList = RoleRightManager.GetRoleRightByRoleId(roleId);
  
        //如果当前复选框所对应的菜单在list中具有。那么选中该复选框
        foreach (RoleRight rr in rrList)
        {
            //遍历所有的checkbox
            foreach (ListItem li in CheckBoxList1.Items)
            {
                if (rr.Node.NodeId.ToString() == li.Value)
                {
                    li.Selected = true;
                }
            }
        }
    }

    protected void CheckBoxList2_DataBound(object sender, EventArgs e)
    {
       foreach (RoleRight rr in rrList)
       {
         //遍历所有的checkbox
         foreach (ListItem li in CheckBoxList2.Items)
         {
            if (rr.Node.NodeId.ToString() == li.Value)
            {
                li.Selected = true;
             }
         }
       }       
    }

 

 

----------------------保存 按钮----源码--------------------

 protected void btnSave_Click(object sender, EventArgs e)
    {
        List<string> NodeIdList = new List<string>();

        #region 遍历出目前选中复选框的值 存放于NodeIdList集合中
      
        int dlItemsCount = DataList1.Items.Count;
        for (int i = 0; i < dlItemsCount; i++)
        {
            //跟节点
            CheckBoxList cbList1 = DataList1.Items[i].FindControl("RoleRight1").FindControl("CheckBoxList1") as CheckBoxList;
            foreach (ListItem licb1 in cbList1.Items)
            {
                if (licb1.Selected)
                {
                    NodeIdList.Add(licb1.Value);
                }
            }
            //子节点
            CheckBoxList cbList2 = DataList1.Items[i].FindControl("RoleRight1").FindControl("CheckBoxList2") as CheckBoxList;
            foreach (ListItem licb2 in cbList2.Items)
            {
                if (licb2.Selected)
                {
                   NodeIdList.Add(licb2.Value);
                }
            }
        }

        #endregion
   
        string stringAdd="";
        string stringDel = "";
     
        #region 判定是 添加或删除 添加项存于stringAdd中,删除项存于StringDel中。
        List<string> rrStrList = new List<string>();
        //查询以前的权限集合
        IList<RoleRight> roleRightList = RoleRightManager.GetRoleRightByRoleId(Convert.ToInt32(RoleId));
        foreach (RoleRight rrList in roleRightList)
        {
            rrStrList.Add(rrList.Node.NodeId.ToString());
            //没有删除
            if (!NodeIdList.Contains(rrList.Node.NodeId.ToString()))
            {
                stringDel += rrList.Node.NodeId.ToString()+",";
            }
         }
         foreach (string nodeIdStr in NodeIdList)
         {
             if (!rrStrList.Contains(nodeIdStr))
             {
                 stringAdd += nodeIdStr + ",";
             }
         }

         #endregion

         //修改用户权限 调用存储过程[sp_UpdateRoleRight]
         //参数: string add, string del, string str, int roleId, string test

         RoleRightManager.UpdateRoleRight(stringAdd, stringDel, ",", Convert.ToInt32(RoleId),"");

         Response.Redirect("RoleManage.aspx");
    }

--------------RoleRightManager.cs----------
//修改用户权限 调用存储过程[sp_UpdateRoleRight]
        public static void UpdateRoleRight(string add, string del, string str, int roleId, string test)
        {
            RoleRightService.UpdateRoleRight(add, del, str, roleId, test);
        }

-------------RoleRightService.cs----------
//修改用户权限 调用存储过程[sp_UpdateRoleRight]
        public static void UpdateRoleRight(string add, string del, string str, int roleId, string test)
        {
            string sql = string.Format(" exec sp_UpdateRoleRight @stringAdd='{0}',@stringDel='{1}',@str='{2}',@RoleId={3},@test='{4}'",add,del,str,roleId,test);

            try
            {
                DBHelper.ExecuteCommand(sql);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                throw e;
            }
        }

 

 

-----------------数据库 存储过程[sp_UpdateRoleRight]---------------

--修改用户权限
create proc sp_UpdateRoleRight
@stringAdd varchar(500),
@stringDel varchar(500),
@str varchar(10),
@RoleId int ,
@test varchar(500)

as

declare @addCount int ,@topAdd int,@FAdd varchar(10),
  @delCount int ,@topDel int,@FDel varchar(10)
--添加
select @addCount = count(*) from split(@stringAdd,@str)               
set @topAdd=1;
while(@addCount>0)
begin
 select top(@topAdd) @FAdd = F1 from dbo.split(@stringAdd,@str)
    insert into RoleRight
 values(@RoleId,@FAdd,@test)
 
 set @topAdd=@topAdd+1
 set @addCount=@addCount-1
end
--删除
select @delCount = count(*) from split(@stringDel,@str)               
set @topDel=1;
while(@delCount>0)
begin
 select top(@topDel) @FDel = F1 from dbo.split(@stringDel,@str)
    delete RoleRight where NodeId = @FDel
 
 set @topDel=@topDel+1
 set @delCount=@delCount-1
end
go

 

-------------使用到的函数 split -------------

create function [dbo].[split]
(
@SourceSql varchar(8000),
@StrSeprate varchar(10)
)
returns @temp table(F1 varchar(100))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+len(@StrSeprate),len(@SourceSql)-len(@StrSeprate))
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值