From 2f2c96ab6babbe2e0f1504117fd312425948da01 Mon Sep 17 00:00:00 2001 From: hongwei Date: Tue, 16 Dec 2025 13:21:55 +0100 Subject: [PATCH 1/3] test/Update system view permissions assertion --- .../src/test/scala/code/api/v6_0_0/SystemViewsTest.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/obp-api/src/test/scala/code/api/v6_0_0/SystemViewsTest.scala b/obp-api/src/test/scala/code/api/v6_0_0/SystemViewsTest.scala index d803e352ff..fc0980560e 100644 --- a/obp-api/src/test/scala/code/api/v6_0_0/SystemViewsTest.scala +++ b/obp-api/src/test/scala/code/api/v6_0_0/SystemViewsTest.scala @@ -144,9 +144,9 @@ class SystemViewsTest extends V600ServerSetup with DefaultUsers { val isSystem = (json \ "is_system").values.asInstanceOf[Boolean] isSystem should equal(true) - And("View should have permissions defined") - val canSeeBalance = (json \ "can_see_bank_account_balance").values.asInstanceOf[Boolean] - canSeeBalance should be(true) + And("View should have permissions defined in allowed_actions") + val allowedActions = (json \ "allowed_actions").values.asInstanceOf[List[String]] + allowedActions should contain("can_see_bank_account_balance") } scenario("We try to get different system views by ID - Authorized access", ApiEndpoint2, VersionOfApi) { From 31ac4b97bc1e2191f8f2d03952daa8cd5c90e0fa Mon Sep 17 00:00:00 2001 From: hongwei Date: Tue, 16 Dec 2025 13:27:27 +0100 Subject: [PATCH 2/3] refactor/ abacrule-Rename MappedAbacRule to AbacRule and extract trait - Rename MappedAbacRule class to AbacRule for cleaner naming convention - Extract AbacRuleTrait as the base trait for ABAC rule contracts - Update AbacRuleProvider to return AbacRuleTrait instead of concrete class - Update all references in Boot.scala to use new AbacRule naming - Update JSONFactory6.0.0.scala to accept AbacRuleTrait in factory methods - Simplify object singleton naming from MappedAbacRule to AbacRule - Improves code clarity by separating trait definition from implementation --- .../main/scala/bootstrap/liftweb/Boot.scala | 4 +- .../{AbacRule.scala => AbacRuleTrait.scala} | 48 +++++++++---------- .../code/api/v6_0_0/JSONFactory6.0.0.scala | 4 +- 3 files changed, 28 insertions(+), 28 deletions(-) rename obp-api/src/main/scala/code/abacrule/{AbacRule.scala => AbacRuleTrait.scala} (71%) diff --git a/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala b/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala index ca41978cd7..00ffcecad7 100644 --- a/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala +++ b/obp-api/src/main/scala/bootstrap/liftweb/Boot.scala @@ -30,7 +30,7 @@ import code.CustomerDependants.MappedCustomerDependant import code.DynamicData.DynamicData import code.DynamicEndpoint.DynamicEndpoint import code.UserRefreshes.MappedUserRefreshes -import code.abacrule.MappedAbacRule +import code.abacrule.AbacRule import code.accountapplication.MappedAccountApplication import code.accountattribute.MappedAccountAttribute import code.accountholders.MapperAccountHolders @@ -1041,7 +1041,7 @@ object ToSchemify { MappedRegulatedEntity, AtmAttribute, Admin, - MappedAbacRule, + AbacRule, MappedBank, MappedBankAccount, BankAccountRouting, diff --git a/obp-api/src/main/scala/code/abacrule/AbacRule.scala b/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala similarity index 71% rename from obp-api/src/main/scala/code/abacrule/AbacRule.scala rename to obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala index 1f5a711b53..6c04b406d1 100644 --- a/obp-api/src/main/scala/code/abacrule/AbacRule.scala +++ b/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala @@ -8,7 +8,7 @@ import net.liftweb.util.Helpers.tryo import java.util.Date -trait AbacRule { +trait AbacRuleTrait { def abacRuleId: String def ruleName: String def ruleCode: String @@ -18,8 +18,8 @@ trait AbacRule { def updatedByUserId: String } -class MappedAbacRule extends AbacRule with LongKeyedMapper[MappedAbacRule] with IdPK with CreatedUpdated { - def getSingleton = MappedAbacRule +class AbacRule extends AbacRuleTrait with LongKeyedMapper[AbacRule] with IdPK with CreatedUpdated { + def getSingleton = AbacRule object AbacRuleId extends MappedString(this, 255) { override def defaultValue = APIUtil.generateUUID() @@ -54,23 +54,23 @@ class MappedAbacRule extends AbacRule with LongKeyedMapper[MappedAbacRule] with override def updatedByUserId: String = UpdatedByUserId.get } -object MappedAbacRule extends MappedAbacRule with LongKeyedMetaMapper[MappedAbacRule] { +object AbacRule extends AbacRule with LongKeyedMetaMapper[AbacRule] { override def dbTableName = "abac_rule" - override def dbIndexes: List[BaseIndex[MappedAbacRule]] = Index(AbacRuleId) :: Index(RuleName) :: Index(CreatedByUserId) :: super.dbIndexes + override def dbIndexes: List[BaseIndex[AbacRule]] = Index(AbacRuleId) :: Index(RuleName) :: Index(CreatedByUserId) :: super.dbIndexes } trait AbacRuleProvider { - def getAbacRuleById(ruleId: String): Box[AbacRule] - def getAbacRuleByName(ruleName: String): Box[AbacRule] - def getAllAbacRules(): List[AbacRule] - def getActiveAbacRules(): List[AbacRule] + def getAbacRuleById(ruleId: String): Box[AbacRuleTrait] + def getAbacRuleByName(ruleName: String): Box[AbacRuleTrait] + def getAllAbacRules(): List[AbacRuleTrait] + def getActiveAbacRules(): List[AbacRuleTrait] def createAbacRule( ruleName: String, ruleCode: String, description: String, isActive: Boolean, createdBy: String - ): Box[AbacRule] + ): Box[AbacRuleTrait] def updateAbacRule( ruleId: String, ruleName: String, @@ -78,26 +78,26 @@ trait AbacRuleProvider { description: String, isActive: Boolean, updatedBy: String - ): Box[AbacRule] + ): Box[AbacRuleTrait] def deleteAbacRule(ruleId: String): Box[Boolean] } object MappedAbacRuleProvider extends AbacRuleProvider { - override def getAbacRuleById(ruleId: String): Box[AbacRule] = { - MappedAbacRule.find(By(MappedAbacRule.AbacRuleId, ruleId)) + override def getAbacRuleById(ruleId: String): Box[AbacRuleTrait] = { + AbacRule.find(By(AbacRule.AbacRuleId, ruleId)) } - override def getAbacRuleByName(ruleName: String): Box[AbacRule] = { - MappedAbacRule.find(By(MappedAbacRule.RuleName, ruleName)) + override def getAbacRuleByName(ruleName: String): Box[AbacRuleTrait] = { + AbacRule.find(By(AbacRule.RuleName, ruleName)) } - override def getAllAbacRules(): List[AbacRule] = { - MappedAbacRule.findAll() + override def getAllAbacRules(): List[AbacRuleTrait] = { + AbacRule.findAll() } - override def getActiveAbacRules(): List[AbacRule] = { - MappedAbacRule.findAll(By(MappedAbacRule.IsActive, true)) + override def getActiveAbacRules(): List[AbacRuleTrait] = { + AbacRule.findAll(By(AbacRule.IsActive, true)) } override def createAbacRule( @@ -106,9 +106,9 @@ object MappedAbacRuleProvider extends AbacRuleProvider { description: String, isActive: Boolean, createdBy: String - ): Box[AbacRule] = { + ): Box[AbacRuleTrait] = { tryo { - MappedAbacRule.create + AbacRule.create .RuleName(ruleName) .RuleCode(ruleCode) .Description(description) @@ -126,9 +126,9 @@ object MappedAbacRuleProvider extends AbacRuleProvider { description: String, isActive: Boolean, updatedBy: String - ): Box[AbacRule] = { + ): Box[AbacRuleTrait] = { for { - rule <- MappedAbacRule.find(By(MappedAbacRule.AbacRuleId, ruleId)) + rule <- AbacRule.find(By(AbacRule.AbacRuleId, ruleId)) updatedRule <- tryo { rule .RuleName(ruleName) @@ -143,7 +143,7 @@ object MappedAbacRuleProvider extends AbacRuleProvider { override def deleteAbacRule(ruleId: String): Box[Boolean] = { for { - rule <- MappedAbacRule.find(By(MappedAbacRule.AbacRuleId, ruleId)) + rule <- AbacRule.find(By(AbacRule.AbacRuleId, ruleId)) deleted <- tryo(rule.delete_!) } yield deleted } diff --git a/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala b/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala index aee2c33695..90e052d8ea 100644 --- a/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala +++ b/obp-api/src/main/scala/code/api/v6_0_0/JSONFactory6.0.0.scala @@ -777,7 +777,7 @@ case class UpdateViewJsonV600( ViewsJsonV600(views.map(createViewJsonV600)) } - def createAbacRuleJsonV600(rule: code.abacrule.AbacRule): AbacRuleJsonV600 = { + def createAbacRuleJsonV600(rule: code.abacrule.AbacRuleTrait): AbacRuleJsonV600 = { AbacRuleJsonV600( abac_rule_id = rule.abacRuleId, rule_name = rule.ruleName, @@ -789,7 +789,7 @@ case class UpdateViewJsonV600( ) } - def createAbacRulesJsonV600(rules: List[code.abacrule.AbacRule]): AbacRulesJsonV600 = { + def createAbacRulesJsonV600(rules: List[code.abacrule.AbacRuleTrait]): AbacRulesJsonV600 = { AbacRulesJsonV600(rules.map(createAbacRuleJsonV600)) } } From 59b77631f84119d96b81411abbdc5bf9f65154bf Mon Sep 17 00:00:00 2001 From: hongwei Date: Tue, 16 Dec 2025 14:53:08 +0100 Subject: [PATCH 3/3] refactor/ abacrule: Remove redundant dbColumnName overrides from AbacRule - Remove explicit dbColumnName overrides from AbacRuleId, RuleName, RuleCode, IsActive, Description, CreatedByUserId, and UpdatedByUserId fields - Remove dbTableName override from AbacRule companion object - Rely on Lift ORM's default column naming conventions to reduce code duplication - Simplify field definitions while maintaining functionality and database mapping --- .../scala/code/abacrule/AbacRuleTrait.scala | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala b/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala index 6c04b406d1..e4309f342c 100644 --- a/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala +++ b/obp-api/src/main/scala/code/abacrule/AbacRuleTrait.scala @@ -23,27 +23,15 @@ class AbacRule extends AbacRuleTrait with LongKeyedMapper[AbacRule] with IdPK wi object AbacRuleId extends MappedString(this, 255) { override def defaultValue = APIUtil.generateUUID() - override def dbColumnName = "abac_rule_id" - } - object RuleName extends MappedString(this, 255) { - override def dbColumnName = "rule_name" - } - object RuleCode extends MappedText(this) { - override def dbColumnName = "rule_code" } + object RuleName extends MappedString(this, 255) + object RuleCode extends MappedText(this) object IsActive extends MappedBoolean(this) { override def defaultValue = true - override def dbColumnName = "is_active" - } - object Description extends MappedText(this) { - override def dbColumnName = "description" - } - object CreatedByUserId extends MappedString(this, 255) { - override def dbColumnName = "created_by_user_id" - } - object UpdatedByUserId extends MappedString(this, 255) { - override def dbColumnName = "updated_by_user_id" } + object Description extends MappedText(this) + object CreatedByUserId extends MappedString(this, 255) + object UpdatedByUserId extends MappedString(this, 255) override def abacRuleId: String = AbacRuleId.get override def ruleName: String = RuleName.get @@ -55,7 +43,6 @@ class AbacRule extends AbacRuleTrait with LongKeyedMapper[AbacRule] with IdPK wi } object AbacRule extends AbacRule with LongKeyedMetaMapper[AbacRule] { - override def dbTableName = "abac_rule" override def dbIndexes: List[BaseIndex[AbacRule]] = Index(AbacRuleId) :: Index(RuleName) :: Index(CreatedByUserId) :: super.dbIndexes }