查看: 1603|回复: 32
|
ASP.NET - 做一个control user access right的module
[复制链接]
|
|
我是用 MS Visual Studio 2005 - asp.net。
现在必须develop一个系统,第一件事要做的就是做一个control user access right的 module。 请问要如何下手呢?
我是想到用gridview,然后每一个access right旁边有一个checkbox,这个我做到了,可是我的gridview是list完所有 user 的access right。
请问如何做到先display系统全部的access right,然后如果那user原本就有那个access right,checkbox会被tick?
还是有其他更好的办法吗? |
|
|
|
|
|
|
|
发表于 12-5-2009 05:07 PM
|
显示全部楼层
datarowbound event<---- 你會用嗎???
在這裡做... |
|
|
|
|
|
|
|
楼主 |
发表于 12-5-2009 09:53 PM
|
显示全部楼层
不会。。。。明天回公司试试。。 |
|
|
|
|
|
|
|
发表于 13-5-2009 09:31 AM
|
显示全部楼层
做2个gridview
第一个list所有的user, 加一个action column.
action column 里放一个command button让user 点选后在第二个gridview 里display 所有的access right 和chekbox .第二个gridview 里放OK button. 按OK就把input储存DB |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2009 10:47 AM
|
显示全部楼层
请问各位大大,你们在做 user access right control 的时候都是用什么方法呢?是control by menu tree吗?找了好久都没有一个概念。。
我是想到先选user,然后list完整个system的access right,如:
Category - View
Category - Edit
Category - Delete
Product - View
Product - Edit
Product - Delete
然后,是不是要develop 6 个 page
Category - View.aspx
Category - Edit.aspx
Category - Delete.aspx
Product - View.aspx
Product - Edit.aspx
Product - Delete.aspx
然后control by menu? 有什么website有这完整的资料吗?
谢谢.. |
|
|
|
|
|
|
|
发表于 13-5-2009 02:17 PM
|
显示全部楼层
你怎样design user access control table?
我以前作法是有个page是专门set user access control的
里面有个form和grid,form那边有drop downlist给你select user account.当你select好user后 grid就会自动list out那个user的access right的资料,在grid里加个select的link button,click后就会select那个row fill到你的form(textbox checkbox之类)然后user在form改好了按submit button就会save到database. |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2009 02:33 PM
|
显示全部楼层
原帖由 monochrome 于 13-5-2009 02:17 PM 发表
你怎样design user access control table?
我以前作法是有个page是专门set user access control的
里面有个form和grid,form那边有drop downlist给你select user account.当你select好user后 grid就会自动list out ...
我也是做类似的,我用gridview with checkbox,
可是之后要如何用这些data来control user 进的page呢?是在Menu Tree那边下手吗? |
|
|
|
|
|
|
|
发表于 13-5-2009 03:16 PM
|
显示全部楼层
原帖由 可可妹 于 13-5-2009 02:33 PM 发表
我也是做类似的,我用gridview with checkbox,
可是之后要如何用这些data来control user 进的page呢?是在Menu Tree那边下手吗?
在main page preload event里call你写好的 checkUserAccess procedure
这个procedure会从database拿那个user access right的资料
比如product page他没有view access (view=false)就disable那个product menu
或当user click product page时call checkUserAccess 然后redirect去error page
如此之类的.. |
|
|
|
|
|
|
|
楼主 |
发表于 13-5-2009 10:08 PM
|
显示全部楼层
原帖由 monochrome 于 13-5-2009 03:16 PM 发表
在main page preload event里call你写好的 checkUserAccess procedure
这个procedure会从database拿那个user access right的资料
比如product page他没有view access (view=false)就disable那个product menu
...
你说的main page preload event 是不是指master page呢?
谢谢你给了宝贵的提示~~ |
|
|
|
|
|
|
|
发表于 14-5-2009 02:32 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 14-5-2009 02:35 PM
|
显示全部楼层
code behind:
Protected Sub gvUserGroup_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvUserGroup.SelectedIndexChanged
programmaticModalPopup.Show()
cblReport.DataBind()
End Sub |
|
|
|
|
|
|
|
发表于 14-5-2009 02:48 PM
|
显示全部楼层
需要安装ajax control toolkit 来做modalpop up 的效果. |
|
|
|
|
|
|
|
楼主 |
发表于 16-5-2009 12:22 PM
|
显示全部楼层
原帖由 j4m35bond 于 14-5-2009 02:48 PM 发表
需要安装ajax control toolkit 来做modalpop up 的效果.
谢谢你的分享,你这个coding是用来 insert user access right的对吗? |
|
|
|
|
|
|
|
楼主 |
发表于 16-5-2009 12:23 PM
|
显示全部楼层
请问在check 那user有没有access right,你们是在他一Login的时候就check他的access right list - 如 Edit Category, View Product,还是在他进入那个function page时才check呢? |
|
|
|
|
|
|
|
发表于 22-5-2009 12:01 AM
|
显示全部楼层
请问可可妹的Access Right 是 Store 在 DATASET 的 DATATABLE 吗?
通常你应该会在page_load not ispostback 时bind 你的gridview with dataset table。
在你的gridview 里 add 一个 hiddenfield control as indicator of access right.
然后在rowdatabound 里设定你的checkbox either checked or unchecked.
the code similarly like this but i didn'test it.
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim chkAuthority As CheckBox = DirectCast(e.Row.Cells(0).FindControl("CheckboxID"), CheckBox)
Dim AccessRight As HiddenField = DirectCast(e.Row.Cells(0).FindControl("hdAccessRight"), HiddenField)
If AccessRight.Value = "Authorized" Then
chkAuthority.Checked = True
Else
chkAuthority.Checked = False
End If
End If
End Sub |
|
|
|
|
|
|
|
发表于 22-5-2009 12:20 AM
|
显示全部楼层
如果在login时define access right 你可以用来disable or invisible the menu items. 如果是particular function within the page.你一定要在page load里define.你可能可以用array来store 你page privileges .
Dim privileges() As String = {"privileges A", "privileges B", "privileges C"}
才来compare with your database. |
|
|
|
|
|
|
|
楼主 |
发表于 25-5-2009 08:49 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-5-2009 10:07 PM
|
显示全部楼层
原帖由 可可妹 于 25-5-2009 08:49 PM 发表
我的access right是放在 SQL database的.
请问page load not is post back是什么意思呢?
其实Bind 是什么意思呢?我的girdview,加了item template - checkbox,然后可以binding的,可是我不明白这是做什么的 ...
[quote]原帖由 可可妹 于 25-5-2009 08:49 PM 发表
既然卡贴我就多写一点
checked=<%# bind(ID)%> 〈-- 我觉得不可能work 。
如果要bind checked method with database field. 必须是boolean.
Checked ='<%# Convert.ToBoolean (Eval("ID")) %>'
但是你的ID可能STORE TRUE OR FALSE 吗?
我相信不是.
最有可能的是你checked if the ID IS NULLSTRING 或者in certain condition.
<asp:CheckBox ID="chkID" runat="server" Checked='<%# iif(bind("ID")<>"", true,false) %>' />
或者
<asp:checkbox id="chkID" runat="server" checked='<%# Eval("ID").ToString().Equals("Y") %>' />
当你的ID FIELD 是 Y 就会 CHECKED。
最后我还是建议你在ROWDATABOUND EVENT DEFINE比较容易。
[ 本帖最后由 zhixuen 于 25-5-2009 10:35 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 25-5-2009 10:07 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-5-2009 10:07 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|