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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在運行時重新加載自定義屬性?ASP.NET 核心 MVC

如何在運行時重新加載自定義屬性?ASP.NET 核心 MVC

C#
鴻蒙傳說 2022-12-31 13:39:43
我有一個應(yīng)用程序,用戶可以在其中創(chuàng)建新角色。某些操作只能由某些角色訪問。要檢查是否允許用戶執(zhí)行特定操作,我使用自定義 AuthorizeAttribute,類似于https://stackoverflow.com/a/40300184。[AuthorizeRoles(Permission.Unlink, Permission.Link)] [HttpGet("link")]    public IActionResult Link(int id)    {        ...    }AuthorizeRolesAttribute 類:public class AuthorizeRolesAttribute : AuthorizeAttribute{    public AuthorizeRolesAttribute(params Permission[] permissions)    {           Roles = GetRoles(permissions);    }}獲取角色:public static string GetRoles(params Permission[] permissions){    DataRowCollection rows = DatabaseHelper.RoleTable.Rows;    List<string> allowedRoles = new List<string>();    foreach (DataRow row in rows)    {        bool allowed = true;        foreach (Permission permission in permissions)        {            if ((bool)row[permission.ToString()] == false)                allowed = false;        }        //if all required permissions are true in this role it is added to the allowed roles        if (allowed)            allowedRoles.Add(row["ROLE"].ToString());    }    return string.Join(",", allowedRoles);}當應(yīng)用程序啟動時,每個具有 AuthorizeRolesAttribute 的方法都會調(diào)用 GetRoles 方法來確定允許哪些角色使用該方法。但是,當添加新角色時,這適用于現(xiàn)有角色。該屬性不會重新評估角色。我需要更新屬性并允許新角色使用該方法而無需重新啟動應(yīng)用程序。添加新角色后,我嘗試運行以下代碼。(如https://stackoverflow.com/a/12196932所建議)typeof(UsersController).GetMethod(nameof(UsersController.Link)).GetCustomAttributes(false);這確實會導(dǎo)致 AuthorizeRolesAttribute 再次調(diào)用 GetRoles(),并且會返回一個包含新 Role 的字符串。但是,當嘗試以具有新角色的用戶身份訪問“鏈接”方法時,我得到 403 Forbidden 狀態(tài)。
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

我找到了解決辦法。而不是這個:


public class AuthorizeRolesAttribute : AuthorizeAttribute

{

    public AuthorizeRolesAttribute(params Permission[] permissions)

    {   

        Roles = GetRoles(permissions);

    }

}

我現(xiàn)在有這個:


public class AuthorizeRolesAttribute : Attribute, IAuthorizationFilter 

{

    private readonly Permission[] permissions;

    public AuthorizeRolesAttribute(params Permission[] permissions)

    {

        this.permissions = permissions;

    }


    public void OnAuthorization(AuthorizationFilterContext context)

    {

        string[] roles = Authentication.GetRoles(permissions).Split(",");

        bool allowed = context.HttpContext.User.Claims.Any(c => c.Type.Contains("role") && roles.Contains(c.Value));

        if (!allowed)

            context.Result = new ForbidResult();

    }

}


查看完整回答
反對 回復(fù) 2022-12-31
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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