每个实体授权的Web API

时间:2015-08-06 13:25:35

标签: c# asp.net entity-framework asp.net-web-api identity

我想授权用户具有对实体的写入权限。我通过多种方式验证了这一点。 例如,我会检查entity.PropertyX == user.PropertyYentity.Users.Contains(user))或更复杂的内容......

目前我正在控制器动作中直接执行此操作,随着控制器数量的增加而不再可接受。

// example class, pretty much all classes have these properties
// lets assume they do for brevity
public class Foo     
{
    // omitted...
    public int PropertyX { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

我想将此逻辑移动到例如属性。但我不确定我是否可以在属性中获得相同的灵活性。因为我经常/总是需要有问题的实体来检查用户,这不是在属性中容易完成的事情。 (据我所知)

身份

目前我正在使用自己的用户表,但我正计划在某些时候更改为Identity。我听说过基于声明的授权,但我必须说我还没有得到它:(那么声明会在这里以任何方式帮助我吗?据我所知,装饰用户比如地址字段。

控制器

[CheckIfUserHasAccess]
public IHttpActionResult Post(T entity)
{
    // omitted...
}

[CheckIfUserHasAccess]
public IHttpActionResult Patch(int id, JObject jobj)
{
    // omitted...
}

对......问题部分:) 您将如何实施按实体授权

1 个答案:

答案 0 :(得分:0)

我会使用自定义授权过滤器。这将使您能够使用将执行自定义授权逻辑的自定义属性来装饰操作。

有一些关于如何做的基本信息here