protected virtual void AddPermissionToDictionaryRecursively(Dictionary <string, PermissionDefinition> permissions, PermissionDefinition permission) { if (permissions.ContainsKey(permission.Name)) { throw new InvalidOperationException($"Duplicate permission name {permission.Name}"); } permissions[permission.Name] = permission; foreach (var child in permission.Children) { AddPermissionToDictionaryRecursively(permissions, child); } }
/// <inheritdoc /> public async Task <PermissionGrantResult> CheckAsync(ClaimsPrincipal principal, PermissionDefinition permission) { var roles = principal?.FindAll(ClaimTypes.Role).Select(c => c.Value).ToArray(); if (roles == null || !roles.Any()) { return(PermissionGrantResult.Undefined); } foreach (var role in roles) { if (await _permissionStore.IsGrantedAsync(permission.Name, Name, role)) { return(PermissionGrantResult.Granted); } } return(PermissionGrantResult.Undefined); }