1

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

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

Users:
 +UserID
 +Username
 +...

Roles:
 +RoleID
 +Name

UserRolesAssociation:
 +RoleID
 +UserID
 +EntityID

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

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

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

4

1 回答 1

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)
{
    ...
}
于 2012-09-22T08:54:49.693 回答