| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2844 人关注过本帖
标题:如何将角色与任务的关系写进数据库中?
只看楼主 加入收藏
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
结帖率:100%
收藏
 问题点数:0 回复次数:25 
如何将角色与任务的关系写进数据库中?
我参考了别人的界面,是为不同的角色设置不同的访问权的,下图中,左边为角色列表,右边为执行的操作。如果 CheckBox 打上勾就表示该角色拥有勾选的操作的权限。
一、如何实现将角色与任务的关系写进数据库中?
例如,我在界面左边的GridView控件上选定了“系统管理员”,然后在右边的GridView控件上勾选了上面的三个选项,然后按“更新”按钮,在“更新”按钮的click事件中如何用代码将“系统管理员”的ID与选定任务的ID写进数据库中?
二、如何实现在该页面中,选择了某一角色后,右边的GridView控件根据数据表中该角色的任务极限在相应的CheckBox 打上勾?

图片附件: 游客没有浏览图片的权限,请 登录注册

[此贴子已经被作者于2007-7-30 9:38:17编辑过]

搜索更多相关主题的帖子: 数据库 角色 任务 关系 
2007-07-30 09:31
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 

前台代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Role-Task.aspx.cs" Inherits="Admin_User_Role_Task_Role_Task" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>角色配置</title>
<style type="text/css">
.hidden
{display:none;}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<div style="z-index: 101; left: 19px; width: 232px; position: absolute; top: 5px;
height: 242px">
<asp:Label ID="Label1" runat="server" Text="角色列表"></asp:Label><br />
<asp:Panel ID="Panel2" runat="server" Height="500px" BorderColor="PeachPuff" BorderStyle="Double" ScrollBars="Auto">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="#DEBA84"
BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
EmptyDataText="数据不存在……" Font-Size="Smaller" GridLines="None" OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowCreated="GridView1_RowCreated" OnRowDeleting="GridView1_RowDeleting"
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" Width="250px">
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<Columns>
<asp:BoundField DataField="RoleId" HeaderText="ID" ReadOnly="True">
<ItemStyle CssClass="hidden" Width="0px" />
<HeaderStyle CssClass="hidden" Width="0px" />
</asp:BoundField>
<asp:TemplateField HeaderText="角色名称">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("RoleName") %>' TextMode="MultiLine"
Width="168px"></asp:TextBox>
</EditItemTemplate>
<ItemStyle Width="180px" />
<HeaderStyle BackColor="#FFFFC0" ForeColor="Black" />
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("RoleName", "{0}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update"
Text="更新"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel"
Text="取消"></asp:LinkButton>
<ajaxToolkit:ConfirmButtonExtender ID="ConfirmButtonExtender1" runat="server" ConfirmText="确要取消当前操作?"
TargetControlID="LinkButton2">
</ajaxToolkit:ConfirmButtonExtender>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="40px" />
<HeaderStyle Width="40px" />
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit"
Text="编辑"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除"></asp:LinkButton>
<ajaxToolkit:ConfirmButtonExtender ID="ConfirmButtonExtender2" runat="server" ConfirmText="确要删除数据?"
TargetControlID="LinkButton2">
</ajaxToolkit:ConfirmButtonExtender>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowSelectButton="True" />
</Columns>
<RowStyle BackColor="#E3EAEB" ForeColor="#8C4510" Wrap="False" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="Blue" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="OldLace" BorderStyle="None" />
</asp:GridView>
&nbsp;&nbsp;&nbsp;
<br />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:Panel>
<table cellpadding="2" cellspacing="1">
<tr>
<td style="width: 3px">
<asp:TextBox ID="TextBox2" runat="server" Width="168px"></asp:TextBox></td>
<td style="width: 3px">
<asp:Button ID="Button1" runat="server" Text="添加角色" OnClick="Button1_Click" /></td>
</tr>
</table>
</div>
<div style="z-index: 102; left: 324px; width: 100px; position: absolute; top: 5px;
height: 100px">
<asp:Label ID="Label2" runat="server" Text="允许执行的任务列表" Width="200px"></asp:Label><br />
<asp:Panel ID="Panel1" runat="server" Height="500px" ScrollBars="Auto" BorderColor="PeachPuff" BorderStyle="Double">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" BackColor="#DEBA84"
BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
EmptyDataText="数据不存在……" Font-Size="Smaller" GridLines="None"
OnRowCreated="GridView1_RowCreated" Width="250px">
<FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
<Columns>
<asp:BoundField DataField="GongNengMiaoShu_Id" HeaderText="ID" ReadOnly="True">
<ItemStyle CssClass="hidden" Width="0px" />
<HeaderStyle CssClass="hidden" Width="0px" />
</asp:BoundField>
<asp:TemplateField HeaderText="允许">
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" Width="30px" />
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="GongNengMiaoShu" HeaderText="功能描述" />
</Columns>
<RowStyle BackColor="#E3EAEB" ForeColor="#8C4510" Wrap="False" />
<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="Blue" />
<PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
<HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="OldLace" BorderStyle="None" />
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:Panel>
<asp:Button ID="Button2" runat="server" Text="更新" /></div>
</form>
</body>
</html>


我是2.0超级菜鸟,请多多教导!
2007-07-30 09:34
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 

后台部分代码:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection conn = new SqlConnection("data source=(local);database=****;user=****; password=****");
DataSet ds = new DataSet();
SqlDataAdapter da1 = new SqlDataAdapter("select * from roles", conn);
da1.Fill(ds, "roles");
SqlDataAdapter da2 = new SqlDataAdapter("select * from Authority", conn);
da2.Fill(ds, "Authority");
GridView1.DataSource = ds;
GridView1.DataMember = "roles";
GridView1.DataBind();
GridView2.DataSource = ds;
GridView2.DataMember = "Authority";
GridView2.DataBind();
}
}


我是2.0超级菜鸟,请多多教导!
2007-07-30 09:41
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 
数据表如下图所示:

图片附件: 游客没有浏览图片的权限,请 登录注册


我是2.0超级菜鸟,请多多教导!
2007-07-30 09:49
cyyu_ryh
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1899
专家分:176
注 册:2006-10-21
收藏
得分:0 
首先你的表设计有问题,没主键
你点击编辑时弹出任务表,同时把roleid传入任务列表中,再根据第三张表显示是否打沟
注意:你第三张表主要存储的是某个角色对应的不同任务
这需要两个查询,同时查询后面两张表,根据关系显示

有事无事都密我. MSN: cyyu_ryh@hotmail.co.jp E-mail: cyyu_ryh@
2007-07-30 10:27
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 
谢谢斑竹!不太明白……
大家有否这方面的代码供小弟参考?
RoleId 和 TaskId 分别为角色表和任务表的主键……

我是2.0超级菜鸟,请多多教导!
2007-07-30 10:40
冰彩虹
Rank: 4
来 自:上海
等 级:贵宾
威 望:14
帖 子:806
专家分:44
注 册:2007-6-28
收藏
得分:0 
一、如何实现将角色与任务的关系写进数据库中?
例如,我在界面左边的GridView控件上选定了“系统管理员”,然后在右边的GridView控件上勾选了上面的三个选项,然后按“更新”按钮,在“更新”按钮的click事件中如何用代码将“系统管理员”的ID与选定任务的ID写进数据库中?
(更新时,先删除角色和任务关系表该角色下的所有记录,然后插入你选中的关系数据)

二、如何实现在该页面中,选择了某一角色后,右边的GridView控件根据数据表中该角色的任务极限在相应的CheckBox 打上勾?
(这个就需要你查出角色下拥有的权限数据后,遍历右边的GridView与查询出来的数据进行匹配,满足的就把相应行的CheckBox打勾)

不知道这样说得清楚不?

Flying without wings
2007-07-30 11:12
cyyu_ryh
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1899
专家分:176
注 册:2006-10-21
收藏
得分:0 
楼上的不错,基本上是这个意思

有事无事都密我. MSN: cyyu_ryh@hotmail.co.jp E-mail: cyyu_ryh@
2007-07-30 11:50
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 

谢谢两位斑竹的热心教导,还有问题请教:

问题一:
斑竹的第一点意思是:在角色与任务关系表中,将某个角色的所拥有的所有任务权限放在一起,用逗号隔分(一个角色对应一个任务数组)还是在数据表一个角色ID对应一个任务ID?
例如:

ID RoleId TaskId
1 1 1,2,4,6
2 2 3,5,7

还是

ID RoleId TaskId
1 1 1
2 1 2
3 1 4
4 1 6
5 2 3
6 2 5
7 2 7

问题二
以上不管采用哪一种方式存放权限,当查出角色下拥有的权限数据后,如何实现遍历右边的GridView与查询出来的数据进行匹配,满足的就把相应行的CheckBox打勾?


我是2.0超级菜鸟,请多多教导!
2007-07-30 12:49
冰彩虹
Rank: 4
来 自:上海
等 级:贵宾
威 望:14
帖 子:806
专家分:44
注 册:2007-6-28
收藏
得分:0 
问题一:
两种存放数据方式都可以,不过第一种取数据需要额外的做些分离的操作,个人推荐使用第二种方式,看你第三张表就很适合这种多对多的关系数据

问题二:
假设查出角色下拥有的权限放在一个list里面,然后类似下面的
foreach(GridViewRow row in GridView2)
{
if(list.Contains(row.Cells[1].Text))
{
CheckBox checkBox = (CheckBox)row.FindControl("CheckBox1");
checkBox.Checked = true;
}
}

PS:家里电脑没有vs,在记事本里随便写的,可能有些笔误

Flying without wings
2007-07-30 19:07
快速回复:如何将角色与任务的关系写进数据库中?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030857 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved