时间:2017-11-30 13:39:21

标签: c# authorization

我正在修改现有的类,以便一个方法允许不同的角色,我不希望任何其他方法具有该角色。

[Authorize("addedit, admin")]
public class JobsController : BaseODataController<Job>
{
    //This method needs to allow one more role!
    public Job Get(int Id)
    {
        //stuff
    }

    public IHttpActionResult Post(Job job)
    {
        //stuff
    }

    public IHttpActionResult Update(int id)
    {
        //stuff
    }
}

问题是添加此角色我需要在类级别添加它,这将使该角色可以访问此类的所有方法。我希望这个角色访问该类,但只能使用这个方法。最简单的方法是删除类级别的属性,然后使用 -

[Authorize("addedit, admin, newrole")]
public Job Get(int Id)
{
    //stuff
}

[Authorize("addedit, admin")]
public IHttpActionResult Post(Job job)
{
    //stuff
}

然而实际上这个类实际上有很多不同的方法,所以每个方法都这样做很麻烦。如果不这样做或将此方法拆分为自己的类,是否有任何方法可以通过新角色访问此类并只允许一个方法?

1 个答案:

答案 0 :(得分:0)

实际上,无法使用默认的Authorize属性执行此操作。简而言之,你正在寻找类似的东西;

[MyAuthorize(Roles = "addedit, admin", Except = "Get")]
public class JobsController : BaseODataController<Job>
{
    [MyAuthorize(Roles = "addedit, admin, newrole")]
    public Job Get(int Id)
    {
        //stuff
    }

    public IHttpActionResult Post(Job job)
    {
        //stuff
    }

    public IHttpActionResult Update(int id)
    {
        //stuff
    }
}

您应该为其提供自定义派生授权属性。

如果您想在操作中手动检查角色,则另一个选项是[AllowAnonymous]。喜欢的东西;

[Authorize("addedit, admin")]
public class JobsController : BaseODataController<Job>
{
    [AllowAnonymous]
    public Job Get(int Id)
    {
        //Check the roles (addedit, admin, newrole) manually

        //stuff
    }

    public IHttpActionResult Post(Job job)
    {
        //stuff
    }

    public IHttpActionResult Update(int id)
    {
        //stuff
    }
}