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);
        }
Exemple #2
0
        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);
        }