For comprehensive information about FlexiCore Security Service please visit our site.
FlexiCore Security Service is a FlexiCore Module and a FlexiCore Plugin.
FlexiCore Security Service defines the services required to manage multi-tenancy access control objects and to execute a multi-tenancy access control queries on user defined entities.
Add the flexicore-security-service dependency to your main app using the latest version available from maven central:
<dependency>
<groupId>com.wizzdi</groupId>
<artifactId>flexicore-security-service</artifactId>
<version>LATEST</version>
</dependency>
Add the flexicore-security-service dependency to your main app using the latest version available from maven central:
<dependency>
<groupId>com.wizzdi</groupId>
<artifactId>flexicore-security-service</artifactId>
<version>LATEST</version>
<scope>provided</scope>
</dependency>
add the flexicore-security-service.jar to your plugins folder.
adding security predicates is easily done by calling BaseclassRepository
addBaseclassPredicates
method.
full example:
@Component
@Extension
public class TestEntityRepository implements Plugin {
@PersistenceContext
private EntityManager em;
@Autowired
private BaseclassRepository baseclassRepository;
public List<TestEntity> listAllTestEntities(TestEntityFilter TestEntityFilter, SecurityContextBase securityContext) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<TestEntity> q = cb.createQuery(TestEntity.class);
Root<TestEntity> r = q.from(TestEntity.class);
List<Predicate> predicates = new ArrayList<>();
addTestEntityPredicates(TestEntityFilter, cb, q, r, predicates, securityContext);
q.select(r).where(predicates.toArray(Predicate[]::new));
TypedQuery<TestEntity> query = em.createQuery(q);
BaseclassRepository.addPagination(TestEntityFilter, query);
return query.getResultList();
}
public <T extends TestEntity> void addTestEntityPredicates(TestEntityFilter TestEntityFilter, CriteriaBuilder cb, CommonAbstractCriteria q, From<?, T> r, List<Predicate> predicates, SecurityContextBase securityContext) {
if (securityContext != null) {
Join<T, Baseclass> join = r.join(TestEntity_.security);
baseclassRepository.addBaseclassPredicates(cb, q, join, predicates, securityContext);
}
}
public long countAllTestEntities(TestEntityFilter TestEntityFilter, SecurityContextBase securityContext) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> q = cb.createQuery(Long.class);
Root<TestEntity> r = q.from(TestEntity.class);
List<Predicate> predicates = new ArrayList<>();
addTestEntityPredicates(TestEntityFilter, cb, q, r, predicates, securityContext);
q.select(cb.count(r)).where(predicates.toArray(Predicate[]::new));
TypedQuery<Long> query = em.createQuery(q);
BaseclassRepository.addPagination(TestEntityFilter, query);
return query.getSingleResult();
}
}