是否可以绕过控制器上的授权角色检查,但对某个操作强制执行角色检查?我花了一些时间研究这个,我发现的一切都展示了如何实现AllowAnonymousAttribute。我目前正在使用AllowAnonymousAttribute,它对于完全绕过操作的授权非常有用。这不是我想要的。我有一个需要某些角色的控制器。在请求特定操作时,我想跳过控制器级别的角色,只验证用户是否具有在操作中指定的角色。MVC跳过控制器身份验证使用操作
下面是一些代码:
[Authorize(Roles="Administrator")]
public class MembersController : ViewApiController<MemberView>
{
// a list of actions....
[Authorize(Roles="ApiUser")]
[HttpPost]
public void AutoPayPost([FromBody] List<AutoPayModel> autoPayList)
{
//....
}
}
问题是我希望用户只用“ApiUser”的作用,以有机会获得“AutoPayPost”行动。我意识到我可以删除类级授权属性,然后将其添加到我的控制器上的每个操作方法,减去'AutoPayPost'操作。我想避免这种情况,因为我的几个控制器从一个基类继承而来,该基类提供了需要“管理”角色的一长串操作。因此,我将不得不重写每个基本操作,将Authorize属性添加到重写的方法,然后将调用委托给基类。这将工作,但如果我后来决定添加功能的基类,我将不得不记得回到MembersController并重写新的方法,添加属性等...
这将是伟大的,如果最终的结果是这样的:
[Authorize(Roles="Administrator")]
public class MembersController : ViewApiController<MemberView>
{
// a list of actions....
[Authorize(Roles="ApiUser", IgnoreControllerRoles=true)]
[HttpPost]
public void AutoPayPost([FromBody] List<AutoPayModel> autoPayList)
{
//....
}
}
然后建立一个自定义属性? – 2013-05-10 16:26:21
很好。我将如何在属性中实现这个?使用名为“IgnoreControllerRoles”的属性构建自定义属性是非常简单的部分。它将如何工作?我有一个名为'LogonAuthorizeAttribute'的属性,通过一个动作过滤器全局添加到所有控制器中(http://blogs.msdn.com/b/rickandy/archive/2011/05/02/securing-your-asp-net- MVC -3- application.aspx)。我可以检查这个自定义属性,如果它存在做某事。问题是我不知道如何绕过控制器授权,但允许操作授权。 – jwdenny13 2013-05-10 16:53:02