ASP.net授权问题

时间:2014-01-31 16:58:13

标签: c# asp.net sql-server authorization roleprovider

我有一个使用Active Directory验证用户登录我网站的应用程序。

我的数据库中还有一个包含用户类型的表。

根据用户类型,我的用户可以看到不同的VIEWS。

Ex:NormalUser可以看到3个视图(关于 - 联系 - 查看数据)     ManagerUser可以看到5个视图(关于 - 联系 - 查看数据 - 删除数据 - 更新数据)。

然而,视图工作正常,但是我有一个问题,例如normalUser手动将URL更改为UpdateData.aspx然后他将看到managerUser的页面。如何阻止用户访问其他页面?

请注意,我在Site.Master中有我的StateView代码

2 个答案:

答案 0 :(得分:1)

我们在几个网络应用程序中使用相同的身份验证/授权设置,使用Windows身份验证和自定义SQL表进行授权。

您有几个选择:我建议选项1或2.

  1. 由于您有一个存储用户角色/类型的自定义表,您可以编写自定义RoleProvider(http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx),并添加web.config授权规则以限制基于用户对页面的访问角色。这就是我们在申请中所做的。

  2. 使用Windows Active Directory组代替userType表,然后您可以添加web.config授权规则以允许所需的AD组。您将需要使用Windows角色提供程序(我认为这是Windows身份验证的默认设置,因此可能不必更改任何内容)。

  3. 在页面的Page_Load方法中添加代码,以根据您的UserType表查找用户有权访问,并抛出UnauthorizedAccessException,即用户无权访问。如果您的应用程序中只有几页并且没有大量并发用户,那么这是“快速”解决方案,但不是最干净的选择。

  4. 要添加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)