public async Task <string> Handle(CreateGroupRoleCommand request, CancellationToken cancellationToken) { // Pokusím se načíst skupinu uživatelů, do které se má přidat nová role (vyhodím výjimku, pokud ji nedohledám). var group = await _groupRepository.GetByIdAsync(request.GroupId, true); // Připravím si role aktuálně přihlášeného uživatele, abych věděl jestli má právo na přidání role. var currentUserRoles = _groupRoleRepository.GetForUserInGroup(_currentUserIdService.UserId, request.GroupId); // Pokud nemá aktuálně přihlášený uživatel právo na přidání role, vyhodím výjimku. if (group.CreatedBy != _currentUserIdService.UserId && currentUserRoles.Any(r => r.Permission == UserGroupPermission.Admin)) { throw new ForbiddenAccessException(); } // Vytvořím entitu naplněnou daty z příkazu. var entity = new GroupRole() { GroupId = request.GroupId, Name = request.Name, Permission = request.Permission }; // Přidám záznam do datového zdroje a uložím.` await _groupRoleRepository.AddOrUpdateAsync(entity, cancellationToken); await _unitOfWork.SaveChangesAsync(cancellationToken); // Vrátím Id vytvořeného záznamu. return(entity.Id); }
public override async Task <PaginatedList <GroupRoleDto> > Handle(GetGroupRolesForUserInGroupQuery request, CancellationToken cancellationToken) { // Zkontoluji, zda-li uživatel existuje. _userRepository.ThrowIfNotExists(request.UserId); // Zkontroluji, zda-li skupina uživatelů existuje. _groupRepository.ThrowIfNotExists(request.GroupId); // Načtu kolekci uživatelských rolí uživatele v dané skupině a zpracuju na stránkovanou kolekci. var result = await _groupRoleRepository.GetForUserInGroup(request.UserId, request.GroupId) .ProjectTo <GroupRoleDto>(_mapper.ConfigurationProvider) .PaginatedListAsync(request.PageNumber, request.PageSize); return(result); }