第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Razor 視圖中的 ASP.Net MVC 自定義授權(quán)策略提供程序

Razor 視圖中的 ASP.Net MVC 自定義授權(quán)策略提供程序

C#
寶慕林4294392 2023-12-17 10:39:29
對(duì)于某些應(yīng)用程序,我需要一個(gè)自定義授權(quán)策略提供程序,并按照此鏈接成功創(chuàng)建了一個(gè)可在控制器中運(yùn)行的授權(quán)策略提供程序?,F(xiàn)在,當(dāng)涉及到視圖時(shí),在基于角色的授權(quán)中,您可以簡(jiǎn)單地使用術(shù)語(yǔ) @if (User.IsInRole("SomeRole")) 來(lái)顯示或隱藏 div 和資源。如何在視圖中使用自定義授權(quán)策略提供程序來(lái)確定給定用戶是否可以根據(jù)策略評(píng)估查看內(nèi)容?我搜索了網(wǎng)絡(luò),找不到有關(guān)它的有用信息,并嘗試與@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)但這也并不成功——它也不是一項(xiàng)政策。以前有人這樣做過(guò)嗎?更新我在控制器中使用自定義策略提供程序,如下所示:[MinimumAgeAuthorize(15)]public IActionResult Index(){       //some code}我不能做@if ((await AuthorizationService.AuthorizeAsync(User, "MinimumAgeAuthorize(15)")).Succeeded)在剃刀視圖中它的等價(jià)物是什么?
查看完整描述

1 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊

我不知道什么對(duì)您不起作用,但這就是您使用 AuthorizationService 的方式。


對(duì)于此示例,我們假設(shè)您在啟動(dòng)時(shí)定義了一個(gè)策略:


services.AddAuthorization(options =>

{

    // assume that claimtype of role is role.

    options.AddPolicy("MyRolePolicy", policy => policy.RequireClaim("role", "SomeRole"));

});

這意味著受“MyRolePolicy”限制的代碼;僅當(dāng)用戶具有角色“SomeRole”時(shí)才可訪問(wèn)。相當(dāng)于 User.IsInRole("SomeRole")。


在視圖中注入服務(wù)并測(cè)試用戶的策略:


@using Microsoft.AspNetCore.Authorization

@inject IAuthorizationService _authorizationService


@if ((await _authorizationService.AuthorizeAsync(User, "MyRolePolicy")).Succeeded)

{

}

當(dāng)您使用自定義授權(quán)策略提供程序時(shí),策略是通過(guò)中間件添加的,例如:


public class AuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider

{

    public AuthorizationPolicyProvider(IOptions<AuthorizationOptions> options) : base(options)

    {

    }


    public async override Task<AuthorizationPolicy> GetPolicyAsync(string policyName)

    {

        // check static policies first

        var policy = await base.GetPolicyAsync(policyName);


        if (policy == null)

            return new AuthorizationPolicyBuilder().AddRequirements(new PermissionRequirement(policyName)).Build();


        return policy;

    }

}

在此示例中,策略將添加為權(quán)限(如果不存在),其中聲明類型為 permission,值為策略名稱。當(dāng)我添加政策 MyPermission 時(shí),它將檢查聲明類型 permission 的值 MyPermission。


視圖中:


@if ((await _authorizationService.AuthorizeAsync(User, "MyPermission")).Succeeded)

{

}

我不確定您所說(shuō)的“它也不是策略”是什么意思,但授權(quán)策略提供程序返回策略。因此,您應(yīng)該能夠驗(yàn)證這些策略。無(wú)論是簡(jiǎn)單的聲明類型(例如權(quán)限或角色)還是帶有參數(shù)的更復(fù)雜的策略。但名稱必須匹配。還要確保注入必要的處理程序、服務(wù)等。


更新

您還可以使用要求進(jìn)行驗(yàn)證:


@if ((await _authorizationService.AuthorizeAsync(User, null, new MinimumAgeRequirement(15))).Succeeded)

其中MinimumAgeRequirement 是要求本身。


如記錄:


AuthorizeAsync(ClaimsPrincipal, Object, IEnumerable<IAuthorizationRequirement>)

檢查用戶是否滿足特定的一組要求 指定資源


查看完整回答
反對(duì) 回復(fù) 2023-12-17
  • 1 回答
  • 0 關(guān)注
  • 184 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)