每个域实体的用户角色关联

时间:2012-09-22 08:37:08

标签: asp.net-mvc authorization

我的数据库中有以下结构:

DomainEntities:
 +EntityID
 +Name
 +ParentID
 +...

Users:
 +UserID
 +Username
 +...

Roles:
 +RoleID
 +Name

UserRolesAssociation:
 +RoleID
 +UserID
 +EntityID

所以我想使用MVC的内置授权属性来过滤我的控制器中由不同成员制作的动作。

如果user1对entity1或其下的任何实体进行删除操作,我可以说什么,我可以看到他是否有合适的角色来执行此操作并相应地过滤操作。

解决该主题的最佳做法是什么? 我应该创建自己的权限引擎,为我提供所需的答案,还是可以使用现有功能?

1 个答案:

答案 0 :(得分:2)

  

解决该主题的最佳做法是什么?

自定义[Authorize]似乎是实现此逻辑的好地方。

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authorized = base.AuthorizeCore(httpContext);
        if (!authorized)
        {
            // the use ris not authenticated or not authorized - no need to continue
            return false;
        }

        string username = httpContext.User.Identity.Name;
        // read the entity id that this user is attempting to manipulate
        string entityId = (string)httpContext.Request.RequestContext.RouteData.Values["id"] ?? httpContext.Request["id"];

        return IsAllowed(username, entityId);
    }

    private bool IsAllowed(string username, string entityId)
    {
        // You know what to do here - hit the database and check whether
        // the current user is the owner of the entity
        throw new NotImplementedException();
    }
}

然后:

[HttpDelete]
[MyAuthorize]
public ActionResult Delete(int id)
{
    ...
}