public async Task UpdatePermissionsAsync(IEnumerable<PermissionsMartixViewModel> permissions) { foreach (var permission in permissions) { foreach (var role in permission.Roles) { var dbItem = await _dbContext.PermissionsMatrixItems.FirstOrDefaultAsync(i => i.PageId == permission.Item.PageId && i.Action.ToLower() == permission.Item.Action.ToLower() && i.RoleId == role.RoleId); if (dbItem == null) { dbItem = new PermissionsMatrixItem { Action = permission.Item.Action, PageId = permission.Item.PageId, RoleId = role.RoleId, Value = role.Value }; _dbContext.PermissionsMatrixItems.Add(dbItem); } dbItem.Value = role.Value; } foreach (var user in permission.Users) { var dbItem = await _dbContext.PermissionsMatrixItems.FirstOrDefaultAsync(i => i.PageId == permission.Item.PageId && i.Action.ToLower() == permission.Item.Action.ToLower() && i.UserId == user.UserId); if (dbItem == null) { dbItem = new PermissionsMatrixItem { Action = permission.Item.Action, PageId = permission.Item.PageId, UserId = user.UserId, Value = user.Value }; _dbContext.PermissionsMatrixItems.Add(dbItem); } dbItem.Value = user.Value; } } await _dbContext.SaveChangesAsync(); }
public async Task<ActionResult<PermissionsMatrixItem>> CreateAsync(PermissionsMatrixItem item) { item.Value = false; var dbpage = await _dbContext.PermissionsMatrixPages.FirstOrDefaultAsync(p => p.Name.Equals(item.Page.Name, StringComparison.OrdinalIgnoreCase)); if (dbpage == null) { dbpage = new PermissionsMatrixPage { Name = item.Page.Name.ToLower() }; _dbContext.PermissionsMatrixPages.Add(dbpage); } if (item.Action == AllActionsConst) { var actions = (await DiscoverWebApiMethods()).Where(m => m.Page.Name.ToLower() == item.Page.Name.ToLower()).Select(m => m.Action).Distinct().OrderBy(s => s); foreach (var action in actions) { _dbContext.PermissionsMatrixItems.Add(new PermissionsMatrixItem { Action = action, Page = dbpage, Value = false }); } } else { item.Page = dbpage; item.PageId = dbpage.Id; _dbContext.PermissionsMatrixItems.Add(item); } await _dbContext.SaveChangesAsync(); return ActionResult<PermissionsMatrixItem>.Success(item); }