我有一个使用Active Directory验证用户登录我网站的应用程序。
我的数据库中还有一个包含用户类型的表。
根据用户类型,我的用户可以看到不同的VIEWS。
Ex:NormalUser可以看到3个视图(关于 - 联系 - 查看数据) ManagerUser可以看到5个视图(关于 - 联系 - 查看数据 - 删除数据 - 更新数据)。
然而,视图工作正常,但是我有一个问题,例如normalUser手动将URL更改为UpdateData.aspx然后他将看到managerUser的页面。如何阻止用户访问其他页面?
请注意,我在Site.Master中有我的StateView代码
答案 0 :(得分:1)
我们在几个网络应用程序中使用相同的身份验证/授权设置,使用Windows身份验证和自定义SQL表进行授权。
您有几个选择:我建议选项1或2.
由于您有一个存储用户角色/类型的自定义表,您可以编写自定义RoleProvider(http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx),并添加web.config授权规则以限制基于用户对页面的访问角色。这就是我们在申请中所做的。
使用Windows Active Directory组代替userType表,然后您可以添加web.config授权规则以允许所需的AD组。您将需要使用Windows角色提供程序(我认为这是Windows身份验证的默认设置,因此可能不必更改任何内容)。
在页面的Page_Load方法中添加代码,以根据您的UserType表查找用户有权访问,并抛出UnauthorizedAccessException,即用户无权访问。如果您的应用程序中只有几页并且没有大量并发用户,那么这是“快速”解决方案,但不是最干净的选择。
要添加web.config authorizaiton规则,请使用此语法,并在<location>
元素的根目录下添加<configuration>
部分,其中path可以是文件夹名称或页面名称。 ASP.NET将自动魔法为您强制执行这些规则。
<location path="AdminFolder">
<system.web>
<authorization>
<allow roles="Admin"/> //Allows users in Admin role
<deny users="*,?"/> // deny everyone else
</authorization>
</system.web>
</location>
使用给定的RoleProvider,如果需要检查用户是否属于给定角色,也可以从代码中的任何位置使用User.IsInRole(“YourRoleName”)。
这是类布局的shell,包括需要在选项1中为自定义RoleProvider实现的方法。注意:如果您有自己的用于管理角色成员身份的UI,那么您不必完全实现{{ 1}}和CreateRole
方法。我只是DeleteRole
作为实现,它工作正常。您需要实现其他方法。
Throw New NotImplementedException()
答案 1 :(得分:0)
您已完成身份验证,但您要求的是要求实施授权。
http://www.codeproject.com/Articles/98950/ASP-NET-authentication-and-authorization
如果是windows Authenticaiton http://www.codeproject.com/Articles/175028/ASP-NET-Windows-Authentication-Authorization-by-Gr