基于ASP.NET的授权?
我正在开发一个ASP.NET应用程序(不使用MVC),并且需要基于用户角色许可的授权方案,其中页面和/或方法可以要求他们所需的特定权限(而不是用户拥有的角色)。 有没有办法扩展窗体身份验证(或建立一些东西)来解决这个问题?
如果可能的话,我希望能够使用属性:
[RequirePermission("UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}
也许甚至对于方法:
public class MyClass
{
...
[RequirePermission("UserEdit")]
public void Save()
{
...
}
}
这可能吗?
我发现这个页面,建议使用角色权限:
[Authorize(Roles = "UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}
我不太喜欢这种解决方案,但这也是解决问题的一种可能方式,但是我需要做些什么来实现它呢?
微软的授权模式很糟糕......它已被广泛认可http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/)。
这就是说。 通过适应他们的IPrincipal.IsInRole
API来交叉兼容是很好的(因此可以利用Authorize
属性)
所以...我做的妥协是在数据库中拥有完整的权限模型,包括用户,角色和权限...但是当我的代码设置CurrentPrincipal
我将用户的角色和权限平铺到IPrincipal
的角色集合中。 这远非理想......但恕我直言,这是一个体面的妥协。 其他人(罗克福德Lhotka)也采取了这种方法:http://www.lhotka.net/weblog/PermissionbasedAuthorizationVsRolebasedAuthorization.aspx
上一篇: based authorization in ASP.NET?
下一篇: ASP.NET MVC Authorization: Permissions in Place of Roles