Skip to content

Commit

Permalink
fix(policy): fix to policies
Browse files Browse the repository at this point in the history
  • Loading branch information
Idane committed Dec 20, 2022
1 parent 51213a0 commit 01eb9de
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package dev.krud.crudframework.crud.handler

import org.springframework.beans.factory.InitializingBean
import org.springframework.beans.factory.ObjectProvider
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import dev.krud.crudframework.crud.policy.Policy
import dev.krud.crudframework.crud.policy.PolicyRuleType
import dev.krud.crudframework.crud.security.PrincipalProvider
import dev.krud.crudframework.model.PersistentEntity
import dev.krud.crudframework.modelfilter.DynamicModelFilter
import dev.krud.crudframework.modelfilter.FilterField
import org.springframework.beans.factory.InitializingBean
import org.springframework.beans.factory.ObjectProvider
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import java.security.Principal

internal class CrudSecurityHandlerImpl(
Expand All @@ -28,13 +28,15 @@ internal class CrudSecurityHandlerImpl(
}

override fun getPolicies(clazz: Class<out PersistentEntity>): List<Policy<PersistentEntity>> {
return applicationContext.getBeansOfType(Policy::class.java).values.toList() as List<Policy<PersistentEntity>>
return applicationContext.getBeansOfType(Policy::class.java)
.values
.filter { it.clazz == clazz }
.toList() as List<Policy<PersistentEntity>>
}

override fun decorateFilter(clazz: Class<out PersistentEntity>, filter: DynamicModelFilter) {
val policies = getPolicies(clazz)
val principal = principalProvider.ifAvailable?.getPrincipal()
policies.forEach { policy ->
getPolicies(clazz).forEach { policy ->
val filterFields = policy.getFilterFields(principal)
filter.filterFields.addAll(filterFields)
}
Expand All @@ -45,8 +47,8 @@ internal class CrudSecurityHandlerImpl(
}

override fun evaluatePreRules(type: PolicyRuleType, clazz: Class<out PersistentEntity>): MultiPolicyResult {
val policies = getPolicies(clazz)
val results = policies.map { it.evaluatePreRules(type, principalProvider.ifAvailable?.getPrincipal()) }
val results = getPolicies(clazz)
.map { it.evaluatePreRules(type, principalProvider.ifAvailable?.getPrincipal()) }
return MultiPolicyResult(
clazz,
results.all { it.success },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public <ID extends Serializable, Entity extends BaseCrudEntity<ID>> Entity updat
public <ID extends Serializable, Entity extends BaseCrudEntity<ID>> Entity updateFromInternal(ID id, Object object, Class<Entity> clazz,
HooksDTO<CRUDPreUpdateFromHook<ID, Entity>, CRUDOnUpdateFromHook<ID, Entity>, CRUDPostUpdateFromHook<ID, Entity>> hooks, boolean applyPolicies) {
DynamicModelFilter filter = new DynamicModelFilter()
.add(FilterFields.eq("id", FilterFieldDataType.get(id.getClass()), clazz));
.add(FilterFields.eq("id", FilterFieldDataType.get(id.getClass()), id));
if (applyPolicies) {
crudSecurityHandler.evaluatePreRulesAndThrow(PolicyRuleType.CAN_UPDATE, clazz);
crudSecurityHandler.decorateFilter(clazz, filter);
Expand Down

0 comments on commit 01eb9de

Please sign in to comment.