簡體   English   中英

使用ASP.NET標識實現權限

[英]Implementing rights with ASP.NET Identity

我們目前正在使用ASP.NET Identity開發一個較小的ASP.NET MVC 5應用程序。 它允許我們維護不同的項目和任務。 我們最近實施了基本身份驗證,因此我們可以向我們的網站注冊用戶並使用他們登錄。

我們希望能夠基於項目管理訪問權限,因此我們可以為每個用戶說明他對指定項目的讀取,寫入,管理或無權限。

我的第一個想法是我們可以在我們的數據庫中創建一個存儲用戶權限的簡單新表。 但我覺得可能有一種內置的方法來實現ASP.NET身份。

所以我的問題是,我們應該遵循哪條路徑 - 手動構建一個新表來管理權限或使用ASP.NET Identity提供的內置功能。

使用ASP.NET Identity提供的內置內容

您可以使用的唯一內容是聲明或角色,並且兩者都不是為您想要的IMO而構建的。

所以我會使用你自己的表將項目鏈接到用戶,例如:

public class UserProjectRights
{
    [Key]
    public ApplicationUser User { get; set; }
    [Key]
    public Project Project { get; set; }

    public AccessRight Right { get; set; }
}

然后,每當您執行某些需要特定權限的操作時,您需要檢查該操作。 有幾種方法可以做到這一點。 在我的應用程序中,我創建了“訪問權限檢查擴展”,如下所示(我為所有“訪問權限實體”定義了一個通用接口,以“重用”該方法):

public static bool? CanView(this ApplicationUser user, Project project)
{
     var userRight = project.Rights.FirstOrDefault(r => r.User == user);
     return userRight == null ? (bool?)null : userRight.Right.HasFlag(AccessRight.View);
}

假設AccessRight是一個枚舉,如:

[Flags]
public enum AccessRight
{
    View,
    Edit,
    Admin
}

然后,您可以在邏輯中執行以下操作:

if (user.CanView(project) == true)
{
    // show project
}

我用bool? 所以我可以實現不同的“默認行為”,因為我知道如果返回null ,則沒有正確的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM