private Result RoleIsValid(string roleId) { if (roleId == null) { _logger.LogInformation($"Adding GroupUser without role"); return(Result.Ok()); } BaseSpecification <RoleEntity> baseSpecification = new BaseSpecification <RoleEntity>(); baseSpecification.AddFilter(x => x.Id == roleId); baseSpecification.AddFilter(x => x.Type == Data.Enums.Entity.RoleTypes.Group); RoleEntity role = _roleRepository.SingleOrDefault(baseSpecification); if (role == null) { _logger.LogError($"No GroupRole. RoleId {roleId}"); return(Result.Fail("no_group_role", "No GroupRole")); } List <RoleListData> canAssigneRoles = _groupUserStore.CanAssigneGroupRoles(); if (!canAssigneRoles.Any(x => x.Id == roleId)) { _logger.LogError($"User can not assign that GroupRole. GroupRoleId {roleId}"); return(Result.Fail("no_permission", "No permission")); } return(Result.Ok()); }
public Result <GroupUserViewModel> GetGroupUserViewModel(string groupId) { _logger.LogInformation($"Getting Group. GroupId {groupId}"); SelectSpecification <GroupEntity, GroupUserViewModel> selectSpecification = new SelectSpecification <GroupEntity, GroupUserViewModel>(); selectSpecification.AddFilter(x => x.Id == groupId); selectSpecification.AddSelect(x => new GroupUserViewModel( x.Id, x.Name)); GroupUserViewModel groupUserViewModel = _groupStore.Get(selectSpecification); if (groupUserViewModel == null) { _logger.LogError($"No Group. GroupId {groupId}"); return(Result.Fail <GroupUserViewModel>("no_group", "No Group")); } groupUserViewModel.CanAssigneGroupRoles = _groupUserStore.CanAssigneGroupRoles(); groupUserViewModel.CanMangeGroupRoles = _groupUserStore.CanManageGroupRoles(); groupUserViewModel.CanChangeOwnRole = _groupUserStore.CanChangeOwnRole(); return(Result.Ok(groupUserViewModel)); }
private Result IsGroupInviteValid(string groupId, string groupRoleId) { Result groupExistsResult = _groupStore.Exists(groupId); if (groupExistsResult.Failure) { return(Result.Fail(groupExistsResult.Errors)); } Result groupRoleExists = GroupRoleExists(groupRoleId); if (groupRoleExists.Failure) { return(Result.Fail(groupRoleExists.Errors)); } List <RoleListData> canAssigneRoles = _groupUserStore.CanAssigneGroupRoles(); if (!canAssigneRoles.Any(x => x.Id == groupRoleId)) { _logger.LogError($"User has no permission so assign role. GroupRoleId {groupRoleId}"); return(Result.Fail("no_permission", "No Permission")); } return(Result.Ok()); }
private async Task <Result> ChangeRoleAsync(long groupUserId, string roleId, string userId) { _logger.LogInformation($"Changing GroupUser role. GroupUserId {groupUserId}, roleId {roleId}"); Result roleValidResult = await RoleIsValid(roleId); if (roleValidResult.Failure) { return(Result.Fail(roleValidResult)); } List <RoleListData> canAssigneGroupRoles = _groupUserStore.CanAssigneGroupRoles(); if (!canAssigneGroupRoles.Any(x => x.Id == roleId)) { _logger.LogError($"User does not have permission to assign role. RoleId {roleId}"); return(Result.Fail(NO_PERMISSION)); } Core.Models.Result.Result <GroupUserEntity> getGroupUserResult = _groupUserStore.Get(groupUserId); if (getGroupUserResult.Failure) { return(getGroupUserResult.ToNewResult()); } GroupUserEntity groupUser = getGroupUserResult.Value; List <RoleListData> canManageGroupRoles = _groupUserStore.CanManageGroupRoles(); if (!canManageGroupRoles.Any(x => x.Id != groupUser.RoleId)) { _logger.LogError($"User does not have permission to manage role. GroupUserId {groupUserId} RoleId {roleId}"); return(Result.Fail(NO_PERMISSION)); } if (!_groupUserStore.CanChangeOwnRole()) { if (groupUser.UserId == userId) { _logger.LogError($"User can not change his own role"); return(Result.Fail(USER_CAN_NOT_CHANGE_HIS_OWN_ROLE)); } } groupUser.UpdateRole(roleId); bool updateResult = await _groupUserDAO.Update(groupUser); if (!updateResult) { _logger.LogError($"Failed to change group user role. GroupUserId {groupUserId}, roleId {roleId}"); return(Result.Fail(FAILED_TO_CAHNGE_GROUP_USER_ROLE)); } return(Result.Ok()); }