2016-05-29 14 views

risposta

12

Questo sembra simile alla domanda posta here

Ho trovato questo link che può essere utile: https://docs.asp.net/en/latest/security/authorization/views.html

Esempi da quella pagina:

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

In alcuni casi, la risorsa sarà il modello di visualizzazione e puoi chiamare AuthorizeAsync esattamente nello stesso modo in cui verificherai durante l'autorizzazione basata su risorsa ;

@if (await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)) 
{ 
    <p><a class="btn btn-default" role="button" 
    href="@Url.Action("Edit", "Document", new {id= Model.Id})">Edit</a></p> 
} 
+9

Questo è semplicemente fantastico. : D Per il prossimo alla ricerca di questo è necessario '@using Microsoft.AspNetCore.Authorization' e' @inject IAuthorizationService AuthorizationService' aswell –

+0

@Thomas Grazie per aver inserito la clausola using ... in questa risposta, MS ha dimenticato quel pezzo importante di informazioni nei loro documenti. – JReam

+0

@JReam hehe ho solo desiderato che la gente elimini la domanda invece del commento: P –

4

Quindi la visione completa contiene:

@using Microsoft.AspNetCore.Authorization 
@inject IAuthorizationService AuthorizationService 

// Your HTML elements and i.e.: 
@if (await AuthorizationService.AuthorizeAsync(User, "RequireAuthenticatedUser")) 
{ 
    <li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li> 
} 
0

Per mettere ancora più succintamente:

@inject Microsoft.AspNetCore.Authorization.IAuthorizationService authorizationService 

@if (await authorizationService.AuthorizeAsync(User, null, "RequireAuthenticatedUser")) 
{ 
    <li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li> 
} 

Sembra AuthorizeAsync() richiede il parametro di risorse, ma nulla possono essere passate come nel mio esempio

5

Con Dot net core 2.0 AuthorizationService.AuthorizeAsync non restituisce più un valore booleano, restituisce un AuthorizationResult. Una versione che lavora per dot net nucleo 2.0 sarà qualcosa di simile:

@using Microsoft.AspNetCore.Authorization 
@inject IAuthorizationService AuthorizationService 

@if ((await AuthorizationService.AuthorizeAsync(User, "RequireAuthenticatedUser")).Succeeded) 
{ 
    <li><a asp-area="" asp-controller="Roles" asp-action="Index">Roles</a></li> 
} 
-1

Se avete intenzione di utilizzare questo in molti punti di vista, allora è meglio implementare una consuetudine RazorPage:

public abstract class MyRazorPage<T> : RazorPage<T> 
{ 
    public async Task<bool> HasPolicyAsync(string policyName) 
    { 
     var authorizationService = Context.RequestServices.GetService(typeof(IAuthorizationService)) as IAuthorizationService; 
     bool isAdmin = (await authorizationService.AuthorizeAsync(User, policyName)).Succeeded; 
     return isAdmin; 
    } 
} 

quindi aprire _ViewImports.cshtml e aggiungere l'istruzione successiva:

@inherits MyRazorPage<TModel> 

ora è possibile cal l HasPolicyAsync() metodo da qualsiasi vista:

if (await HasPolicyAsync(Policies.RequireAdmin)) 
    { 
     <h2>Admin is authorized</h2> 
    } 

Sembrerebbe molto più conciso.

Problemi correlati