在哪里提出授权方法?

时间:2011-12-21 01:22:27

标签: c# asp.net-mvc-3 authorization

这是一个相当普遍的问题,实际上......

我有一个用户类(不是每个应用程序?:)。某些用户可以在不同实体上执行操作,前提是他们具有适当的权限。什么是放置授权逻辑(或任何适用于2个实例的逻辑)的更好的地方?

如果我把它放在User类中,我最终会得到一堆user.CanEditComment()user.CanEditMessage()user.CanDoSomething()等方法 - 可能是需要授权的每个实体的一些方法。看起来像方法杂乱。

另一方面,我可以将这些方法放在实体中,例如comment.CanBeEditedBy(user)。但不知怎的,这似乎也不对......

有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

另一种选择是模仿ASP.NET角色的作用并定义角色集合并将其分配给用户。然后,您的功能可以向用户查询访问该功能所需的角色。您的用户类只需要一种方法HasRole(string roleName),您的功能可以控制自己的访问权限。

答案 1 :(得分:2)

我认为为授权逻辑放置数据的最佳位置是您的数据库。根据您的要求,您可以创建一些表格,例如UsersRolesPermissionsLocations等。 最近我问过question。你可以看看这个计划。
下一步是授权逻辑。我遇到的第一件事就是使用自定义属性类和覆盖的OnAuthorization方法。

public class PermissionsAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // the best place for your authorization logic
    }
}

它将使您能够以非常方便的方式将控制权内部分开(就像我一样)。

[Permissions()]
public ActionResult Some()
{
}  

答案 2 :(得分:1)

请参阅我对this question的回答。因为您将所有内容存储在DB中,所以可以将枚举Role更改为字符串列表(从DB加载)。