权限管理

关于授权

我们强烈建议您 在此之前阅读  授权文档

介绍

Module Zero实现了ASP.NET Boilerplate授权系统的IPermissionChecker接口。要定义和检查权限,请参阅  授权文档在本文档中,我们将向您展示如何为角色和用户授予权限。

角色权限

如果我们授予角色权限,则具有此角色的所有用户都有权获得该权限(除非特定用户明确禁止)。

我们使用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 <string>)作为输入。然后,我们使用IPermissionManager按名称查找所有Permission对象。之后,我们调用SetGrantedPermissionsAsync方法来更新角色的权限。

还有其他方法,如GrantPermissionAsync和ProhibitPermissionAsync来逐个控制权限。

用户权限

虽然基于角色的权限管理对于大多数应用程序来说足够了,但我们可能需要控制每个用户的权限。当我们为用户定义权限设置时,它会覆盖为用户角色定义的权限设置。

例如,假设我们有一个禁止用户权限的应用程序服务方法:

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);
    }
}

UserManager有许多方法来控制用户的权限。在此示例中,我们获取UserId和PermissionName,并使用UserManager的ProhibitPermissionAsync方法禁止用户的权限。

当我们禁止用户的许可时,即使他/她的角色被授予许可,他/她也无法获得此许可的授权。我们可以使用相同的原则来授予权限。当我们专门为用户授予权限时,即使未授予用户角色权限,也会授予该用户权限。我们可以使用ResetAllPermissionsAsync方法删除用户的所有用户特定权限设置。

nidie.com.cn - 用心与你沟通