Module Zero之權限管理


返回《Module Zero學習目錄》


概覽介紹

Module-Zero實現了ABP授權系統的IPermissionChecker接口。這篇文章中,我們將會看到如何給角色和用戶授予權限。要定義和檢查權限,請轉至《ABP理論學習之授權(Authorization)》

角色權限

如果我們給一個角色授予一個權限,那么這個角色的所有用戶都授權了該權限(除非對於一個特定的用戶顯示禁止)。

我們使用RoleManager改變一個角色的權限。比如,SetGrantedPermissionsAsync可以在一個方法調用中改變一個角色的所有權限:

public class RoleAppService : IRoleAppService
{
    private readonly RoleManager _roleManager;
    private readonly IPermissionManager _permissionManager;

    public RoleAppService(RoleManager roleManager, IPermissionManager permissionManager)
    {
        _roleManager = roleManager;
        _permissionManager = permissionManager;
    }

    public async Task UpdateRolePermissions(UpdateRolePermissionsInput input)
    {
        var role = await _roleManager.GetRoleByIdAsync(input.RoleId);
        var grantedPermissions = _permissionManager
            .GetAllPermissions()
            .Where(p => input.GrantedPermissionNames.Contains(p.Name))
            .ToList();

        await _roleManager.SetGrantedPermissionsAsync(role, grantedPermissions);
    }
}

這個例子中,我們獲得了一個RoleId和授予權限的名稱列表(input.GrantedPermissionNames是List 類型)。我們使用 IPermissionManager根據名字找到所有的“權限”對象。然后我們調用 SetGrantedPermissionsAsync方法來更新角色的權限。

也有其他方法來一個個地控制權限,如GrantPermissionAsyncProhibitPermissionAsync

用戶權限

雖然對於大多說應用來說,基於角色的權限管理可能足夠了,但我們可能控制每個用戶的權限。當我們為一個用戶定義一個權限設置時,它就重寫了來自該用戶角色的權限設置。

比如有這么個例子,假設我們有一個應用服務,該服務對於某個用戶是沒有使用權限的:

public class UserAppService : IUserAppService
{
    private readonly UserManager _userManager;
    private readonly IPermissionManager _permissionManager;

    public UserAppService(UserManager userManager, IPermissionManager permissionManager)
    {
        _userManager = userManager;
        _permissionManager = permissionManager;
    }

    public async Task ProhibitPermission(ProhibitPermissionInput input)
    {
        var user = await _userManager.GetUserByIdAsync(input.UserId);
        var permission = _permissionManager.GetPermission(input.PermissionName);

        await _userManager.ProhibitPermissionAsync(user, permission);
    }
}

用戶管理者(User Manager)有許多控制用戶權限的方法。在例子中,我們獲得了UserIdPermissionName,並使用ProhibitPermissionAsync方法禁止一個用戶擁有某個權限。

當我們禁止某個用戶擁有某個權限時,即使ta的角色授予了該權限,Ta也沒有獲得這個權限的授權。當我們特別給某個用戶授予權限時,即使該用戶的角色沒有授予權限,那么該用戶也得到了該權限的授權。我們可以使用ResetAllPermissionsAsync為用戶刪除所有的用戶特定的權限設置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM