2016-07-14 16 views
2

Ich habe eine MVC 6 Website (asp.net core/5), wo ich überprüfen muss, ob ein Benutzer in bestimmten Rollen oder nicht von den Rasierklingen Seiten ist. Immer wenn ich User.IsInRole("{rolename}") rufe, gibt es immer falsch zurück. Wenn ich mein RoleRepository gerade anrufe, funktioniert es gut.User.IsInRole in ASP.NET Core überschreiben

Muss ich die User.IsInRole() Funktionalität irgendwo außer Kraft setzen, oder ist diese Methode in ASP.NET Core veraltet?

Hier ist meine Implementierung bisher:

 if (User.IsInRole("Admin") || User.IsInRole("SuperUser") || User.IsInRole("DataIntegrity")) 
     { 
      model.IsDataIntegrity = true; 
     } 

Dies korrekt funktioniert, wenn ich es über die Politik Autorisieren nennen, wie folgt aus:

[Authorize("DataIntegrity")] 
    [ValidateAntiForgeryToken] 
    [HttpPost] 
    [Route("team/edit/{schoolId:int:min(1)}/{schoolName?}")] 
    public async Task<IActionResult> Edit(SchoolEditViewModel model) 
    { 
     model.SchoolInfo = await _schoolRepo.GetSchoolInfo(model.SchoolId, _currentSeason); 

     IsModelValid(model); 
     if (!ModelState.IsValid) 
     { 
      return View(await ApplyUnboundProperties(model)); 
     } 

     await SaveSchool(model); 

     return RedirectToAction("Live", "SchoolMain", new {schoolId = model.SchoolId, schoolName = model.SchoolInfo.SchoolName}); 
    } 
+1

nicht die 'IPrincipal' Sachen noch haben? Sie könnten einfach eine Erweiterungsmethode schreiben, um dasselbe zu erreichen. Existiert das Attribut noch im Kern? –

+0

Hier ist ein Beispiel von Aspnet-Quellcode auf github: https://github.com/aspnet/Mvc/blob/dev/test/WebSites/FiltersWebSite/Filters/AuthorizeUserAttribute.cs –

+0

Sieht aus, als ob Sie uns 'IAuthorizationFilter' Sachen jetzt haben . –

Antwort

0

Mehr googeln und hier ist was ich Werke für mich gefunden:

Checking login user AuthorizePolicy in Razor page on Asp.Net Core

Genauer gesagt, ich benötigt, um den IAuthorizationService in meine Ansichten (oder Controller) zu injizieren und dann die AuthorizeAsync-Methode aufzurufen.

(In Ansicht)

@inject IAuthorizationService AuthorizationService 

... 

@if (await AuthorizationService.AuthorizeAsync(User, "PolicyName")) 
{ 
    <p>This paragraph is displayed because you fulfilled PolicyName.</p> 
}