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

Hun*_*ood 10 asp.net authorization custom-attributes

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

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

[RequirePermission("UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}
Run Code Online (Sandbox Code Playgroud)

甚至可能用于方法:

public class MyClass
{
    ...
    [RequirePermission("UserEdit")]
    public void Save()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

我找到了这个页面,建议使用Roles获取权限:

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

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

Jef*_*eff 10

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

那就是说.通过适应其IPrincipal.IsInRoleAPI(从而能够利用该Authorize属性)来实现交叉兼容性是很好的

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