您的位置:首页 > 其它

MyOffice项目中的 "权限分配"

2009-02-16 16:42 225 查看
角色管理页面: 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" />
         
<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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐