public async Task <EntityPermissionSet> GetPermissionsForType <T>(IUnitOfWork uofw, T type, IEnumerable <string> roleIDs = null) { var typeName = typeof(T).FullName; if (AppContext.UserID == null) { return(EntityPermissionSet.ReadOnly(typeName)); } if (roleIDs == null && await _userManager.IsInRoleAsync(AppContext.UserID, Roles.Admin)) { return(EntityPermissionSet.FullAccess(typeName)); } roleIDs = roleIDs ?? await _userManager.GetRolesAsync(AppContext.UserID); var accessModifiers = await uofw.GetRepository <AccessLevel>().All() .Where(x => roleIDs.Contains(x.RoleID) && x.Entity.TypeName == typeName) .Select(x => new { x.AccessModifier }) .ToListAsync(); return(new EntityPermissionSet() { Create = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Create), Update = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Update), Delete = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Delete), Read = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Read), EntityType = typeName }); }