我的数据库中有以下结构:
DomainEntities: +EntityID +Name +ParentID +... Users: +UserID +Username +... Roles: +RoleID +Name UserRolesAssociation: +RoleID +UserID +EntityID
所以我想使用MVC的内置授权属性来过滤我的控制器中由不同成员制作的动作。
如果user1对entity1或其下的任何实体进行删除操作,我可以说什么,我可以看到他是否有合适的角色来执行此操作并相应地过滤操作。
解决该主题的最佳做法是什么? 我应该创建自己的权限引擎,为我提供所需的答案,还是可以使用现有功能?
答案 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)
{
...
}