如何根据用户角色限制asp.net控件操作?

如何根据用户角色限制asp.net控件操作?,asp.net,authentication,controls,authorization,roles,Asp.net,Authentication,Controls,Authorization,Roles,我的应用程序中有几个页面或视图,对于经过身份验证的用户和匿名用户来说基本相同。我想将FormView和GridView中的插入/更新/删除操作仅限于经过身份验证的用户,并允许经过身份验证的用户和非身份验证的用户进行读取访问 我正在使用asp.net配置系统来处理身份验证和角色。这个系统根据路径限制访问,所以我一直在为授权路径和非授权路径创建重复页面 立即想到的解决方案是检查相应事件处理程序中的角色,限制可能显示的操作(插入/更新/删除按钮),并限制执行的操作(对于可能知道如何在没有按钮的情况下执

我的应用程序中有几个页面或视图,对于经过身份验证的用户和匿名用户来说基本相同。我想将FormView和GridView中的插入/更新/删除操作仅限于经过身份验证的用户,并允许经过身份验证的用户和非身份验证的用户进行读取访问

我正在使用asp.net配置系统来处理身份验证和角色。这个系统根据路径限制访问,所以我一直在为授权路径和非授权路径创建重复页面

立即想到的解决方案是检查相应事件处理程序中的角色,限制可能显示的操作(插入/更新/删除按钮),并限制执行的操作(对于可能知道如何在没有按钮的情况下执行操作的用户),这个解决方案并没有消除重复——我将在一系列页面上复制安全代码,而不是复制页面并基于路径限制访问;后者将大大减少复杂性

我总是可以构建一些提供基于角色的配置的控件,但我认为我现在没有时间做出这种承诺

有没有一种相对简单的方法可以做到这一点(有这样的控件吗?),还是我应该坚持基于路径的访问和复制页面

使用两种授权方法有意义吗?仍然有一些页面严格针对这两个角色,因此我将使用基于路径的授权


最后,至少在使用asp.net配置系统的情况下,使用基于路径的授权以外的内容是否会违反典型的asp.net设计实践?

一种解决方案是在数据库端编写一些自定义存储过程。如果您为auth'ed和unauth'ed传递了一个布尔标志,那么您的SQL代码可以处理返回的结果和执行的操作

但是,如果您设想许多用户未经授权,那么在对数据库进行一千次调用之前,您可能应该使用会话状态检查用户的角色

基本上,您需要将网格“有条件地绑定”到其数据源,通过检查用户角色来确定要调用哪个存储过程


我希望这有点帮助

要显示控件,可以使用asp:LoginView

对于“可能知道如何在没有按钮的情况下执行操作的用户”

在进行更新之前,您可以使用
if User.IsInRole(“角色名称”),然后…
。 您还可以使用以下方法为函数添加安全性:


最好的方法是在自定义控件上添加一个属性,称为Roles或允许此类角色的用户查看控件的内容。因为,您没有时间,所以可以创建一个帮助器方法来处理控件的visible属性。大概是这样的:

<asp:Button id="UpdateButton" runat="server" Visible="<%# IsInRole("Admin") %>" /> 


您还可以创建自己的helper方法来检查更多条件

请看一下这两本由斯科特·米切尔撰写的很棒的教程,我相信它会非常有用

为了进一步阅读,您可以再次阅读由斯科特·米切尔(Scott Mitchell)撰写的系列文章


我之所以说我没有时间,是因为我想用智能标记之类的东西制作一个“通用”自定义控件,以便在不同页面上使用该控件时可以指定不同的数据源。我对asp.net还比较陌生,乍一看有点复杂。我喜欢您设置控件可见性的解决方案;看起来很简单@是的!那就够了!