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

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

ASP.NET 核心 Web API:基于數(shù)據(jù)庫權(quán)限的授權(quán)

ASP.NET 核心 Web API:基于數(shù)據(jù)庫權(quán)限的授權(quán)

C#
波斯汪 2022-11-21 16:56:46
我正在尋找一種解決方案/建議來幫助我創(chuàng)建基于權(quán)限的對 Web API 端點/控制器操作的訪問?;诮巧脑L問是不合適的,因為我沒有可以在 Role("Admin") 或 Role("Controller") 等代碼中使用的固定規(guī)則。基于聲明的權(quán)限也不可行,因為每個用戶/客戶可以對每個業(yè)務(wù)對象/實體擁有不同的權(quán)限(例如,讀取/寫入訪問自己的票證和讀取訪問他/她公司的所有票證,或者如果它是我的技術(shù)人員公司可以完全訪問所有客戶的所有票據(jù)。因此,每個用戶都會有 10s 甚至數(shù)百個索賠,我必須在每次訪問我的 API 時對其進行評估。這是數(shù)據(jù)庫中的某種多租戶,租戶是我們的客戶,擁有某種可以訪問所有租戶數(shù)據(jù)的“主租戶”。我認為像 Visual Guard 這樣的東西可以滿足我的需求,但它非常昂貴,而且他們現(xiàn)在不支持 net core,而且他們的文檔似乎已經(jīng)過時了。我不需要立即找到可用的解決方案,但我會非常感謝一些提示和技巧,因為我現(xiàn)在正在尋找和搜索一些時間。關(guān)于“數(shù)據(jù)庫權(quán)限”的詳細信息: 我的意思是在我的前端(Winforms 應用程序)我想建立一個安全系統(tǒng),我可以在其中創(chuàng)建角色并將其分配給用戶,并且在這些角色中定義了用戶可以執(zhí)行哪些操作以及哪些 CRUD 操作他/她可以對特定的業(yè)務(wù)對象進行操作。每個角色可以有 n 個用戶,每個角色可以有 n 個權(quán)限。每個權(quán)限本身聲明為 exmaple Create:false、Read:true、Write:true 和 Delete:false。如果未找到特定業(yè)務(wù)對象的權(quán)限,則完全拒絕該 BO 上的 CRUD。因此,每當我的 API 中的一個操作被調(diào)用時,我必須檢查該用戶和他/她的規(guī)則是否允許他根據(jù)我的數(shù)據(jù)庫中的規(guī)則和權(quán)限執(zhí)行該特定操作。詳細說明應用程序結(jié)構(gòu): 前端將是一個 Winforms 應用程序,它通過 OData 在后臺調(diào)用 API。我不想完全依賴 Winforms 應用程序的安全性,因為 API 可以從互聯(lián)網(wǎng)訪問,我不能確定用戶是否不會嘗試使用他的憑據(jù)訪問 api 只是為了看看沒有什么是可能的“前端過濾器”。因此,權(quán)限位于 API 中,如果用戶嘗試在前端應用程序中訪問 st,則應用程序本身會“詢問”API 是否可行。稍后我想創(chuàng)建也使用 Odata Web API 的移動客戶端。
查看完整描述

1 回答

?
森欄

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

asp.net core中相關(guān)的API有:


授權(quán)服務(wù)

授權(quán)策略

授權(quán)要求

IAuthorizationHandler

您正在尋找的授權(quán)模式稱為 Resource-based authorization


https://learn.microsoft.com/en-us/aspnet/core/security/authorization/resourcebased?view=aspnetcore-2.2


基本上,您可以定義 AuthorizationPolicy,并將其應用于資源實例:


var ticket = _ticketRepository.Find(ticketID);


var authorizationResult = await _authorizationService

        .AuthorizeAsync(User, ticket, "EditTicketPolicy");

在授權(quán)處理程序中,您可以檢查用戶是否是資源的所有者。

public class ResourceOwnerRequirement : IAuthorizationRequirement

{

}


public class ResourceOwnerHandler 

    : AuthorizationHandler<ResourceOwnerRequirement, MyBusinessObject>

    //: AuthorizationHandler<ResourceOwnerRequirement> use this overload to handle all types of resources...

{

    protected override Task HandleRequirementAsync(

        AuthorizationHandlerContext context, 

        ResourceOwnerRequirement requirement, 

        MyBusinessObject resource)

    {

        int createdByUserId = resource.CreatedBy;

        Claim userIdClaim = ((ClaimsIdentity)context.User.Identity).FindFirst("UserId");


        if (int.TryParse(userIdClaim.Value, out int userId)

            && createdByUserId == userId)

        {

            context.Succeed(requirement);

        }

    }

}


//admin can do anything

public class AdminRequirementHandler : IAuthorizationHandler

{

    public Task HandleAsync(AuthorizationHandlerContext context)

    {

        if (context.User.Claims.Any(c => c.Type == "Role" && c.Value == "Administator"))

        {

            while (context.PendingRequirements.Any())

            {

                context.Succeed(context.PendingRequirements.First());

            }

        }

        return Task.CompletedTask;

    }

}

順便說一句,這仍然可以稱為聲明或基于角色的授權(quán)。具有特定角色的用戶可以編輯自己的工單,但具有管理員角色的用戶還可以編輯其他工單。不同之處在于您將授權(quán)應用于資源,而不僅僅是操作


查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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