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 async Task <Unit> Handle(UpdateGroupRoleCommand request, CancellationToken cancellationToken)
        {
            // Vytáhnu záznam z datového zdroje (vyhodím výjimku, pokud se mi ho nepodaří dohledat).
            var entity = await _groupRoleRepository.GetByIdAsync(request.Id, true);

            // Naplním entitu daty z příkazu.
            entity.Name       = request.Name;
            entity.Permission = request.Permission;

            // Přidám záznam do datového zdroje a uložím.
            await _groupRoleRepository.AddOrUpdateAsync(entity, cancellationToken);

            await _unitOfWork.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }