佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1603|回复: 32

ASP.NET - 做一个control user access right的module

[复制链接]
发表于 12-5-2009 04:40 PM | 显示全部楼层 |阅读模式
我是用 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?
还是有其他更好的办法吗?
回复

使用道具 举报


ADVERTISEMENT

发表于 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.
回复

使用道具 举报

Follow Us
 楼主| 发表于 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
如此之类的..
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层
<asp:SqlDataSource id="dsuser" runat="server" ConnectionString="<%$ ConnectionStrings:MESDB %>"
                        SelectCommand="select id, user from usertable"></asp:SqlDataSource>
                        <asp:GridView ID="gvUser" runat="server" DataSourceID="dsuser" DataKeyNames="ID">
                            <Columns>
                                <asp:TemplateField HeaderText="ID">
                                    <ItemTemplate>
                                        <aspabel ID="lblUID" runat="server" Text='<%# eval("ID" %>' ></aspabel>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="user">
                                    <ItemTemplate>
                                        <aspabel ID="lblUGName" Text='<%# Eval("user" %>' runat="server"></aspabel>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField>
                                    <HeaderTemplate>
                                        Action
                                    </HeaderTemplate>
                                    <ItemTemplate>
                                        <aspmageButton ID="btnEdit" ImageUrl="~/images/icons/pencil2.gif" runat="server" ToolTip="Edit" CommandName="Select" />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
<div ID="btnDummy" runat="server"></div>
        <aspanel ID="pnlModal2" runat="server" Width="650px"  
            Style="display: none; position:absolute; top:100px; left:150px;">
            <div class="FOBody">
                <aspheckBoxList id="cblFunction" runat="server" DataSourceID="dscblFunction" RepeatColumns="3" DataTextField="name"
                DataValueField="id">
               
                </aspheckBoxList>
                <asp:Button ID="btnOK2" runat="server" Text="OK" /><asp:Button ID="btnCancel2" runat="server" Text="Cancel" />
            </div>
            <div class="FOFooter"></div>
        </aspanel>  
        <ajaxToolkit:ModalPopupExtender runat="server" ID="programmaticModalPopup2"
            BehaviorID="programmaticModalPopup2Behavior"
            TargetControlID="btnDummy" CancelControlID="btnCancel2"
            PopupControlID="pnlModal2"
            DropShadow="false"
            RepositionMode="RepositionOnWindowScroll" >
        </ajaxToolkit:ModalPopupExtender>

        <asp:SqlDataSource id="dscblFunction" runat="server" ConnectionString="<%$ ConnectionStringsBConn%>"
        SelectCommand="select id, name from functiontable" SelectCommandType="Text" >
         </asp:SqlDataSource>
回复

使用道具 举报

发表于 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.
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 25-5-2009 08:49 PM | 显示全部楼层
原帖由 zhixuen 于 22-5-2009 12:01 AM 发表

请问可可妹的Access Right 是 Store 在 DATASET 的 DATATABLE 吗?

通常你应该会在page_load not ispostback 时bind 你的gridview with dataset table。


我的access right是放在 SQL database的.

请问page load not is post back是什么意思呢?
其实Bind 是什么意思呢?我的girdview,加了item template - checkbox,然后可以binding的,可是我不明白这是做什么的,曾经在form 的check box,放 checked=<%# bind(ID)%>但是做不到什么。。


谢谢zhixuen
回复

使用道具 举报

发表于 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 08:49 PM 发表


我的access right是放在 SQL database的.

请问page load not is post back是什么意思呢?
其实Bind 是什么意思呢?我的girdview,加了item template - checkbox,然后可以binding的,可是我不明白这是做什么的 ...

原帖由 可可妹 于 25-5-2009 08:49 PM 发表

我的access right是放在 SQL database的.

请问page load not is post back是什么意思呢?
其实Bind 是什么意思呢?我的girdview,加了item template -checkbox,然后可以binding的,可是我不明白这是做什么的,曾经在form 的check box,放 checked=<%#bind(ID)%>但是做不到什么。。  


我不太会用中文解释,但是我尝试把我知道的让你明白。
     If not Me.IsPostBack Then

     End If

Mean if you fire a control like dropdownlist textchange event or buttonclicked event it will cause the postback to render at server page (codebehind)

if not me.ispostback -- > mean when page_load is not caused bypostback what the statement will execute. mostly we will specified notis postback when we would like to initial setting for the page. It willexecute only a time if the page redirected.So IsPostback tells uswhether this is the first time the page has beenrequested, or whether the page is being run as the result of a usersubmitting the page.
(简单的用中文解释就 not ispostback 不是因为user execute submit action, ispostback 就是当user firing submit event.

如果要知道是什么control caused the postback

If Request.Params.Item("Your firing control ID" <> Nothing Then
' bla bla bla
Else
' bla bla bla
End If

或者

Dim PostbackControlA As String = Request.Form("__EVENTTARGET"
‘get postback control name
Dim PostbackControlB As String = Request.Form("__EVENTARGUMENT"
‘get postback control arguments.

bind 就是你把gridview 和 datatable bind 起来。
好像你datatable consist 4 data columns and 4 data rows.当你bind your grid with datatable。 grid 的 layout will as same as your datatable.
<%# DataBinder.Eval(Container.DataItem, "Id" %> 你可以用这个statement bind with databound
或者 control text like label,textbox and hiddenfield. for controls remember to add the single quote.
我给你一个很多example的网站。

http://mattberseth.com/blog/index.html
回复

使用道具 举报

发表于 25-5-2009 10:07 PM | 显示全部楼层
卡贴。~~~

[ 本帖最后由 zhixuen 于 25-5-2009 10:39 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 27-5-2024 10:38 AM , Processed in 0.075748 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表