我正在使用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
{
}
我不是非常喜欢这个解决方案,但这也是解决问题的可能方法,但我需要做些什么才能让它发挥作用?
答案 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