|
|
|
|
@@ -215,14 +215,14 @@ func createTestRoleAssignment(roleRef, accountRef, organizationRef bson.ObjectID
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func createTestPolicyAssignment(roleRef bson.ObjectID, action model.Action, effect model.Effect, organizationRef, descriptionRef bson.ObjectID, objectRef *bson.ObjectID) nstructures.PolicyAssignment {
|
|
|
|
|
func createTestPolicyAssignment(roleRef bson.ObjectID, effect model.Effect, organizationRef, descriptionRef bson.ObjectID, objectRef *bson.ObjectID) nstructures.PolicyAssignment {
|
|
|
|
|
return nstructures.PolicyAssignment{
|
|
|
|
|
Policy: model.Policy{
|
|
|
|
|
OrganizationRef: organizationRef,
|
|
|
|
|
DescriptionRef: descriptionRef,
|
|
|
|
|
ObjectRef: objectRef,
|
|
|
|
|
Effect: model.ActionEffect{
|
|
|
|
|
Action: action,
|
|
|
|
|
Action: model.ActionRead,
|
|
|
|
|
Effect: effect,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
@@ -259,7 +259,7 @@ func TestEnforcer_Enforce(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock policy assignment with ALLOW effect
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, roleRef, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{policyAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Create enforcer
|
|
|
|
|
@@ -284,7 +284,7 @@ func TestEnforcer_Enforce(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock policy assignment with DENY effect
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, roleRef, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{policyAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
@@ -312,11 +312,11 @@ func TestEnforcer_Enforce(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment1, roleAssignment2}, nil)
|
|
|
|
|
|
|
|
|
|
// First role has ALLOW policy
|
|
|
|
|
allowPolicy := createTestPolicyAssignment(role1Ref, model.ActionRead, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
allowPolicy := createTestPolicyAssignment(role1Ref, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, role1Ref, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{allowPolicy}, nil)
|
|
|
|
|
|
|
|
|
|
// Second role has DENY policy - should take precedence
|
|
|
|
|
denyPolicy := createTestPolicyAssignment(role2Ref, model.ActionRead, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
denyPolicy := createTestPolicyAssignment(role2Ref, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, role2Ref, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{denyPolicy}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
@@ -445,7 +445,7 @@ func TestEnforcer_Enforce(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock corrupted policy with invalid effect
|
|
|
|
|
corruptedPolicy := createTestPolicyAssignment(roleRef, model.ActionRead, "invalid_effect", organizationRef, permissionRef, &objectRef)
|
|
|
|
|
corruptedPolicy := createTestPolicyAssignment(roleRef, "invalid_effect", organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, roleRef, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{corruptedPolicy}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
@@ -539,7 +539,7 @@ func TestEnforcer_EnforceBatch(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock policy assignment with ALLOW effect
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectAllow, organizationRef, permissionRef, nil)
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.EffectAllow, organizationRef, permissionRef, nil)
|
|
|
|
|
mockPDB.On("PoliciesForRoles", ctx, []bson.ObjectID{roleRef}, model.ActionRead).Return([]nstructures.PolicyAssignment{policyAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
@@ -664,7 +664,7 @@ func TestEnforcer_GetPermissions(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock policy assignment
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectAllow, organizationRef, createTestObjectID(), nil)
|
|
|
|
|
policyAssignment := createTestPolicyAssignment(roleRef, model.EffectAllow, organizationRef, createTestObjectID(), nil)
|
|
|
|
|
mockPDB.On("PoliciesForRole", ctx, roleRef).Return([]nstructures.PolicyAssignment{policyAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
@@ -702,8 +702,8 @@ func TestEnforcer_SecurityScenarios(t *testing.T) {
|
|
|
|
|
mockRDB.On("Roles", ctx, accountRef, organizationRef).Return([]nstructures.RoleAssignment{roleAssignment}, nil)
|
|
|
|
|
|
|
|
|
|
// Mock multiple policies: both ALLOW and DENY
|
|
|
|
|
allowPolicy := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
denyPolicy := createTestPolicyAssignment(roleRef, model.ActionRead, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
allowPolicy := createTestPolicyAssignment(roleRef, model.EffectAllow, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
denyPolicy := createTestPolicyAssignment(roleRef, model.EffectDeny, organizationRef, permissionRef, &objectRef)
|
|
|
|
|
mockPDB.On("PoliciesForPermissionAction", ctx, roleRef, permissionRef, model.ActionRead).Return([]nstructures.PolicyAssignment{allowPolicy, denyPolicy}, nil)
|
|
|
|
|
|
|
|
|
|
enforcer := createTestEnforcer(mockPDB, mockRDB)
|
|
|
|
|
|