【发布时间】:2011-05-08 20:55:31
【问题描述】:
我的 asp.net Web 应用程序中有一些只有管理员才能看到的 .aspx 页面和一些所有用户都可以看到的 .aspx 页面。我如何限制普通用户访问用于管理员的页面?
此外,我没有实现来自 asp.net 的授权,我的意思是我自己使用会话和标志变量来实现身份验证。在这种情况下,如何根据权限将内容限制为用户?
【问题讨论】:
标签: c# asp.net authorization privileges
我的 asp.net Web 应用程序中有一些只有管理员才能看到的 .aspx 页面和一些所有用户都可以看到的 .aspx 页面。我如何限制普通用户访问用于管理员的页面?
此外,我没有实现来自 asp.net 的授权,我的意思是我自己使用会话和标志变量来实现身份验证。在这种情况下,如何根据权限将内容限制为用户?
【问题讨论】:
标签: c# asp.net authorization privileges
将这些页面放在它们自己的目录中,并在该目录中使用web.config 来限制对它们的访问。
<configuration>
<system.web>
<authorization>
<allow roles="Admins"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
不要重新发明轮子!
【讨论】:
我可能会创建一个自定义函数,当然是公共方法,其中包含基于角色的所有逻辑 [正如您提到的,您不想使用 asp.net 的成员资格功能] 以允许拒绝用户访问页面。此方法将检查页面的用户资格,为了更好的逻辑,您可以在 web.Config 中保留所有页面的密钥。
您可以在
中创建密钥 <appsetting>
<add key="Page1" value="ViewOrders.aspx"/>
<add key="Page2" value="DeleteOrders.aspx"/>
现在,您可以在方法中创建一个 for/foreach 循环来迭代页面名称的键值。我这样说是因为您以后添加页面并相应地分配它们会更容易。
编辑
也许,你想看看这个http://mywsat.codeplex.com/
【讨论】:
如果您使用自己的,您可能想要创建一个自定义角色提供程序,并让它从会话中为用户返回角色,这可能能够弥合这两个差距...
HTH。
【讨论】:
知道这有点旧,但以防其他人使用会员资格。在你的 web.config 中使用它:
<configuration>
<!-- Only administrators may access AdminTools.aspx -->
<location path="AdminTools.aspx">
<system.web>
<authorization>
<allow roles="Administrators" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
参考:使用 C# VB 构建您自己的 ASP.NET 2.0 网站,第二版 克里斯蒂安·戴尔,扎克·鲁瓦尔卡巴
【讨论】: