예제 #1
0
        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();
        }
예제 #2
0
        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);
        }