Skip to content

Commit

Permalink
Merge pull request #54 from dnlkoch/add-permission-controller
Browse files Browse the repository at this point in the history
Add endpoints to read, create, update and delete entity permissions
  • Loading branch information
dnlkoch committed Aug 18, 2022
2 parents 14efac9 + a81aa19 commit 647c378
Show file tree
Hide file tree
Showing 49 changed files with 2,370 additions and 203 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
ALTER TABLE IF EXISTS shogun.userinstancepermissions RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun.userclasspermissions RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun.groupinstancepermissions RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun.groupclasspermissions RENAME COLUMN permissions_id TO permission_id;

ALTER TABLE IF EXISTS shogun_rev.userinstancepermissions_rev RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun_rev.userclasspermissions_rev RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun_rev.groupinstancepermissions_rev RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun_rev.groupclasspermissions_rev RENAME COLUMN permissions_id TO permission_id;
ALTER TABLE IF EXISTS shogun_rev.userinstancepermissions_rev RENAME COLUMN permissions_mod TO permission_mod;
ALTER TABLE IF EXISTS shogun_rev.userclasspermissions_rev RENAME COLUMN permissions_mod TO permission_mod;
ALTER TABLE IF EXISTS shogun_rev.groupinstancepermissions_rev RENAME COLUMN permissions_mod TO permission_mod;
ALTER TABLE IF EXISTS shogun_rev.groupclasspermissions_rev RENAME COLUMN permissions_mod TO permission_mod;
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,22 @@
*/
package de.terrestris.shogun.boot.architecture;

import com.tngtech.archunit.base.DescribedPredicate;
import com.tngtech.archunit.core.importer.ImportOption;
import com.tngtech.archunit.junit.AnalyzeClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchRule;
import de.terrestris.shogun.lib.security.access.entity.EntityPermissionEvaluator;
import de.terrestris.shogun.lib.service.security.provider.GroupProviderService;
import de.terrestris.shogun.lib.service.security.provider.UserProviderService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RestController;

import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*;

@AnalyzeClasses(packages = "de.terrestris", importOptions = { ImportOption.DoNotIncludeTests.class })
public class DependencyRulesTest {
Expand Down Expand Up @@ -93,6 +95,13 @@ public class DependencyRulesTest {
.and().doNotHaveFullyQualifiedName("de.terrestris.shogun.lib.security.access.entity.BaseEntityPermissionEvaluator")
.should().dependOnClassesThat().areAnnotatedWith(Service.class);

@ArchTest
static final ArchRule permission_evaluators_should_not_access_secured_services =
noClasses()
.that().implement(EntityPermissionEvaluator.class)
.should().accessClassesThat().areAnnotatedWith(PreAuthorize.class)
.orShould().accessClassesThat().haveSimpleNameEndingWith("Secured");

@ArchTest
static final ArchRule group_provider_services_should_not_access_services =
noClasses()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ public class NamingConventionsTest {
static final ArchRule services_should_be_named_correctly =
classes()
.that().areAnnotatedWith(Service.class)
.should().haveSimpleNameEndingWith("Service");
// allow names such as UserInstancePermissionServiceSecured
.should().haveSimpleNameContaining("Service");

@ArchTest
static final ArchRule controllers_should_be_named_correctly =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,15 @@
*/
package de.terrestris.shogun.lib.controller;

import de.terrestris.shogun.lib.controller.security.permission.BasePermissionController;
import de.terrestris.shogun.lib.model.BaseEntity;
import de.terrestris.shogun.lib.service.BaseService;
import lombok.extern.log4j.Log4j2;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
Expand All @@ -31,14 +37,8 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;

// TODO Specify and type extension of BaseService
@Log4j2
public abstract class BaseController<T extends BaseService<?, S>, S extends BaseEntity> {
public abstract class BaseController<T extends BaseService<?, S>, S extends BaseEntity> extends BasePermissionController<T, S> {

@Autowired
protected T service;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package de.terrestris.shogun.lib.controller;

import de.terrestris.shogun.lib.controller.security.permission.BasePermissionController;
import de.terrestris.shogun.lib.model.File;
import de.terrestris.shogun.lib.service.BaseFileService;
import lombok.extern.log4j.Log4j2;
Expand All @@ -35,7 +36,7 @@
import java.util.UUID;

@Log4j2
public abstract class BaseFileController<T extends BaseFileService<?, S>, S extends File> {
public abstract class BaseFileController<T extends BaseFileService<?, S>, S extends File> extends BasePermissionController<T, S> {

@Value("${upload.basePath}")
protected String uploadBasePath;
Expand Down
Loading

0 comments on commit 647c378

Please sign in to comment.