【发布时间】:2011-08-31 14:30:52
【问题描述】:
我正在使用一个 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
{
}
我不是非常喜欢这个解决方案,但这也是解决问题的一种可能方法,但我需要做什么才能让它发挥作用?
【问题讨论】:
-
我不确定我是否看到您正在寻找的内容与
AuthorizeAttribute已经提供的内容之间的区别。你不喜欢AuthorizeAttribute的什么地方? -
@qntmfred:基于角色的授权不是基于权限的授权。 Microsoft 在其 IPrincipal 模型中将所有内容都简化为基于角色的授权……但这被广泛认为是其糟糕的设计。理想的模型包括用户、角色和权限。用户在角色中。角色具有一组权限。
-
就像 Rocky(你也一样)说的......如果你认为 IsInRole() 可以被认为是“HasPermission()”,那么就有一个解决方案。当您使用“角色”列表加载 .NET 主体时,实际上是使用权限列表加载它。因此,当您的应用程序询问“IsInRole()”时,它会这样做:
bool result = currentPrincipal.IsInRole(requiredPermission);您仍然可以使用AuthorizeAttribute来完成这项工作 -
没错...但关键是您的内部模型应该区分角色和权限,即使 IPrincipal API 没有...
-
这个主意不错。我在构建数据库和弄清楚逻辑方面没有问题,但是我对 Forms 身份验证相当陌生,所以我不知道 在哪里 放置我的代码...你能给我一些提示吗那里?
标签: asp.net authorization custom-attributes