2016-10-18 1 views

Antwort

1

Ich denke, ein benutzerdefiniertes Attribut ist ein Weg zu gehen.

Hier ist mein Code:

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); 
        } 
       } 
      } 
     } 
    } 
} 

Und hier ist, wie Sie es verwenden können:

// A AuthorizeExtended Autorisieren gleich (mit Rollenfilter) + ausschließen alle lästigen Benutzer

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

// Б AutorizeExtended ist gleich blank Autorisieren + Alle nervtötenden Benutzer ausschließen

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

// В AuthorizeExtended gleich Autorisieren

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