2016-10-18 2 views
0

특정 역할을 제외한 모든 역할을 허용하는 작업에 권한 부여 속성이 필요합니다. 내장특정 역할 속성에없는 경우 권한 부여 MVC 5

[!Authorize(Roles = "SuperUser")] 
    public ActionResult PaySuperUser..... 

아무것도 같은 무엇인가? 또는 맞춤 속성에 대한 제안 사항이 있습니까?

답변

1

사용자 지정 속성은 이동하는 방법이라고 생각합니다. 여기

내 코드입니다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Controllers; 

namespace YourFancyNamespace 
{ 
    public class AuthorizeExtended : AuthorizeAttribute 
    { 
     private string _notInRoles; 
     private List<string> _notInRolesList; 

     public string NotInRoles 
     { 
      get 
      { 
       return _notInRoles ?? string.Empty; 
      } 
      set 
      { 
       _notInRoles = value; 
       if (!string.IsNullOrWhiteSpace(_notInRoles)) 
       { 
        _notInRolesList = _notInRoles 
         .Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries) 
         .Select(r => r.Trim()).ToList(); 
       } 
      } 
     } 

     public override void OnAuthorization(HttpActionContext actionContext) 
     { 
      base.OnAuthorization(actionContext); 
      if (_notInRolesList != null && _notInRolesList.Count > 0) 
      { 
       foreach (var role in _notInRolesList) 
       { 
        if (actionContext.RequestContext.Principal.IsInRole(role)) 
        { 
         actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); 
        } 
       } 
      } 
     } 
    } 
} 

그리고 여기 당신이 그것을 사용하는 방법입니다 :

AuthorizeExtended은 (역할 필터) 권한 부여와 동일 //

+ 제외 모든 성가신 사용자

[AuthorizeExtended(Roles = "User", NotInRoles="PeskyUser")] 
[HttpPost] 
[Route("api/Important/DoNotForgetToUpvote")] 
public async Task<IHttpActionResult> DoNotForgetToUpvote() 
{ 
    return Ok("I did it!"); 
} 

// Б AuthorizeExtended는 평범한 사용자와 동일 함 모든 성가신 사용자를 인증 + 제외하십시오

[AuthorizeExtended(NotInRoles="PeskyUser")] 
[HttpPost] 
[Route("api/Important/DoNotForgetToUpvote")] 
public async Task<IHttpActionResult> DoNotForgetToUpvote() 
{ 
    return Ok("I did it!"); 
} 

// В AuthorizeExtended는

[AuthorizeExtended] 
[HttpPost] 
[Route("api/Important/DoNotForgetToUpvote")] 
public async Task<IHttpActionResult> DoNotForgetToUpvote() 
{ 
    return Ok("I did it!"); 
} 
권한 부여와 동일
관련 문제