public async Task <IReadOnlyList <ResourceInstancePermissions> > GetResourceInstancePermissionsAsync(string roleId, int resourceId) { var definition = _resources.FirstOrDefault(d => d.ResourceId == resourceId); if (definition == null) { throw new ApplicationException($"Can not find resource with ID {resourceId}"); } var dataProviderType = definition.ResourceInstanceProviderTypeOrNull; if (dataProviderType == null) { throw new ApplicationException($"Data provider not specified for resource {definition.PermissionEnumType}"); } var dataProvider = _resourceInstanceProviders.FirstOrDefault(r => r.GetType() == dataProviderType); if (dataProvider == null) { throw new ApplicationException($"Can not resolve service {dataProviderType} from Dependency Injection."); } var instances = await dataProvider.GetAllInstancesAsync(); var permissions = await _permissionStore.GetRoleInstancePermissionsAsync(roleId, resourceId); var metadata = AttributeHelper.GetResourceMetadata(definition.PermissionEnumType); var permissionsMetadata = metadata.Permissions.Where(p => p.IsForInstance).ToList(); return(instances .Select(r => ConvertInstance(r, definition.PermissionEnumType, permissionsMetadata, permissions)) .OrderBy(r => r.Name) .ToList()); }
public static int ToEnum(this ResourceCollection resources, int resourceId, int number) { var definition = resources.FirstOrDefault(r => r.ResourceId == resourceId); if (definition != null) { if (Enum.IsDefined(definition.PermissionEnumType, number)) { return(number); } throw new Exception($"Enum {definition.PermissionEnumType} does not contains permission with value {number}"); } throw new Exception($"Unknown permission with number {number}"); }
public static ResourcePermissionKey ToNumber(this ResourceCollection resources, Type permissionEnum, int permissionValue) { var definition = resources.FirstOrDefault(r => r.PermissionEnumType == permissionEnum); if (definition != null) { return(new ResourcePermissionKey { ResourceId = definition.ResourceId, PermissionId = (int)permissionValue }); } throw new Exception($"Unknown permission '{permissionValue}' with type {permissionEnum}"); }