我正在修改现有的类,以便一个方法允许不同的角色,我不希望任何其他方法具有该角色。
[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
}
然而实际上这个类实际上有很多不同的方法,所以每个方法都这样做很麻烦。如果不这样做或将此方法拆分为自己的类,是否有任何方法可以通过新角色访问此类并只允许一个方法?
答案 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
}
}