59 lines
2.0 KiB
Java
59 lines
2.0 KiB
Java
package de.ph87.tools.group.access;
|
|
|
|
import de.ph87.tools.group.Group;
|
|
import de.ph87.tools.group.GroupRepository;
|
|
import de.ph87.tools.group.uuid.GroupUuid;
|
|
import de.ph87.tools.user.User;
|
|
import de.ph87.tools.user.UserAccessService;
|
|
import de.ph87.tools.user.uuid.UserPrivateUuid;
|
|
import jakarta.annotation.Nullable;
|
|
import lombok.NonNull;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.web.server.ResponseStatusException;
|
|
|
|
@Slf4j
|
|
@Service
|
|
@Transactional
|
|
@RequiredArgsConstructor
|
|
public class GroupAccessService {
|
|
|
|
private final GroupRepository groupRepository;
|
|
|
|
private final UserAccessService userAccessService;
|
|
|
|
public boolean canAccess(@Nullable final UserPrivateUuid userPrivateUuid, @NonNull final GroupUuid groupUuid) {
|
|
final User user = userAccessService.accessOrNull(userPrivateUuid);
|
|
if (user == null) {
|
|
return false;
|
|
}
|
|
final Group group = getByUuidOrThrow(groupUuid);
|
|
return group.getUsers().contains(user);
|
|
}
|
|
|
|
@NonNull
|
|
public GroupAccess access(@NonNull final UserPrivateUuid userPrivateUuid, @NonNull final GroupUuid groupUuid) {
|
|
final User user = userAccessService.access(userPrivateUuid);
|
|
final Group group = getByUuidOrThrow(groupUuid);
|
|
return new GroupAccess(user, group);
|
|
}
|
|
|
|
@NonNull
|
|
public GroupAccess ownerAccess(@NonNull final UserPrivateUuid userPrivateUuid, @NonNull final GroupUuid groupUuid) {
|
|
final GroupAccess groupAccess = access(userPrivateUuid, groupUuid);
|
|
if (!groupAccess.group.isOwnedBy(groupAccess.principal)) {
|
|
throw new ResponseStatusException(HttpStatus.BAD_REQUEST);
|
|
}
|
|
return groupAccess;
|
|
}
|
|
|
|
@NonNull
|
|
private Group getByUuidOrThrow(@NonNull final GroupUuid groupUuid) {
|
|
return groupRepository.findByUuid(groupUuid.uuid).orElseThrow(() -> new ResponseStatusException(HttpStatus.BAD_REQUEST));
|
|
}
|
|
|
|
}
|