如何在ASP.NET中实现基于权限的授权?

时间:2011-08-31 14:30:52

标签: asp.net authorization custom-attributes

我正在使用ASP.NET应用程序(不使用MVC)并且需要基于用户角色权限的授权方案,其中页面和/或方法可以要求他们需要的特定权限(而不是用户的哪个角色)具有)。有没有办法扩展表单身份验证(或构建一些东西)来解决这个问题?

如果可能,我希望能够使用属性:

[RequirePermission("UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}

甚至可能用于方法:

public class MyClass
{
    ...
    [RequirePermission("UserEdit")]
    public void Save()
    {
        ...
    }
}

这可能吗?

我找到this page,建议使用角色获取权限:

[Authorize(Roles = "UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}

我不是非常喜欢这个解决方案,但这也是解决问题的可能方法,但我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:10)

微软的授权模式很糟糕......而且它得到了广泛的认可 http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/)。

那就是说。通过适应他们的IPrincipal.IsInRole API(因此能够利用Authorize属性)来实现交叉兼容性是很好的

所以......我做的妥协是在DB中拥有一个完整的权限模型,包含用户,角色和权限......但是当我的代码设置CurrentPrincipal时,我将用户的角色和权限压平为IPrincipal的角色集合。这远非理想......但恕我直言,这是一个体面的妥协。其他人(Rockford Lhotka)也采用了这种方法:http://www.lhotka.net/weblog/PermissionbasedAuthorizationVsRolebasedAuthorization.aspx

相关问题