Skip to content

Test Cases: Permissions

ModuleCORE-02URDPermissions URD

1. Coverage Summary

AreaURD reqsTest casesCovered
Fixed Roles (ROLE)913
Custom Roles (CROLE)86
Permission Catalog (PERM)55
Grant / Revoke (GRANT)76
Effective Permissions & Scope (EFF)44

Casbin RBAC with per-merchant domains is enabled on this branch — filtering and grant resolution are exercised against the live enforcer, not a mock.

2. Test Cases

TC-<AREA>-NNN lines up with URD-<AREA>-NNN. Priority = P1 (critical) / P2 (major) / P3 (minor).

TC IDURD refScenarioStepsExpectedP
TC-ROLE-001URD-ROLE-001Eight fixed roles seeded1. Initialize system 2. List rolesSuper Admin, Admin, Operator, Owner, Cashier, Employee, Customer, Guest all existP1
TC-ROLE-002URD-ROLE-003Priorities set correctly1. Inspect role priorities999 / 900 / 600 / 500 / 110 / 100 / 10 / 1 respectivelyP1
TC-ROLE-003URD-ROLE-004Super Admin bypass1. Sign in as Super Admin 2. List all merchantsAll merchants returned, no filteringP1
TC-ROLE-004URD-ROLE-004Admin / Operator bypass1. Sign in as Admin (then Operator) 2. List merchantsAll merchants returned, filtering skippedP1
TC-ROLE-005URD-ROLE-005Owner sees own org only1. Owner of Org A (M1,M2) lists merchants; Org B has M3,M4Only M1, M2 returnedP1
TC-ROLE-006URD-ROLE-006Employee sees assigned merchant1. Employee assigned M1 only lists merchantsOnly M1 returnedP1
TC-ROLE-007URD-ROLE-006Cashier mirrors Employee scope1. Cashier assigned M1 lists merchantsOnly M1 returned (same as Employee)P1
TC-ROLE-008URD-ROLE-007Count is filtered1. Owner with 2 merchants counts merchantsCount = 2P1
TC-ROLE-009URD-ROLE-008Foreign ID access denied1. Owner of Org A requests Org B's M3 by IDAccess deniedP1
TC-ROLE-010URD-ROLE-008User filter cannot widen scope1. Owner passes a filter to include Org BFilter ignored; only own data returnedP1
TC-ROLE-011URD-ROLE-002System role immutable1. Try to delete Super Admin roleRejectedP1
TC-ROLE-012URD-ROLE-002System priority immutable1. Try to change Admin priority 900→500RejectedP2
TC-ROLE-013URD-ROLE-009HQ-owner expansion1. Owner at organizer HQ lists merchantsEvery sibling merchant of the organizer returnedP2
TC-CROLE-001URD-CROLE-001Create custom role1. Admin/Owner creates role with name + priorityRole created, type CUSTOMP1
TC-CROLE-002URD-CROLE-002Identifier auto-generated & unique1. Create two roles same priority+name in one scopeSecond rejected (collision)P2
TC-CROLE-003URD-CROLE-003Priority guard on create1. Owner creates role with priority ≥ ownRejected (privilege escalation)P1
TC-CROLE-004URD-CROLE-004Scope link created1. Create role scoped to an org/merchantScope membership recordedP2
TC-CROLE-005URD-CROLE-006Delete blocked when users assigned1. Delete custom role that has usersBlocked — unassign firstP1
TC-CROLE-006URD-CROLE-007Delete cascade1. Delete custom role with no usersRole + grants + scope links soft-deletedP1
TC-PERM-001URD-PERM-001Create permission1. Admin creates permission with code/action/scope/subjectPermission createdP1
TC-PERM-002URD-PERM-002Code uniqueness1. Create permission with an existing codeRejectedP1
TC-PERM-003URD-PERM-003i18n name/description1. Inspect a permissionName & description carry en + viP2
TC-PERM-004URD-PERM-004Update permission1. Admin updates a permission's nameUpdated; code stays immutableP2
TC-PERM-005URD-PERM-005Delete blocked with active grants1. Delete a permission granted to a roleBlockedP1
TC-GRANT-001URD-GRANT-001Grant permissions to role1. Admin grants [P1,P2] to roleGrants created, count returnedP1
TC-GRANT-002URD-GRANT-002Revoke permissions from role1. Admin revokes a permissionGrant removedP1
TC-GRANT-003URD-GRANT-003Idempotent grant1. Grant an already-granted permissionSkipped, skip count returnedP2
TC-GRANT-004URD-GRANT-004Grant / revoke roles to users1. Admin assigns then removes a roleUser gains then loses the role on next sign-inP1
TC-GRANT-005URD-GRANT-005Privilege-escalation guard1. Actor grants on a role ≥ own priorityRejectedP1
TC-GRANT-006URD-GRANT-006, URD-GRANT-007View role / user assignments1. List a role's permissions, users, and a user's rolesCorrect lists returnedP2
TC-EFF-001URD-EFF-001Effective = direct ∪ inherited1. User has role grants + a direct grant 2. Query effectiveUnion returned, deduplicatedP1
TC-EFF-002URD-EFF-002Mode filter1. Query with mode=direct, then mode=inheritOnly direct, then only inheritedP2
TC-EFF-003URD-EFF-003List user orgs & merchants1. Query a user's organizers and merchantsCorrect memberships returnedP2
TC-EFF-004URD-EFF-004Grant resolves in active domain1. Grant in Merchant_A 2. Act under Merchant_B headerGrant does not apply in BP1

3. Traceability

Every Must requirement maps to ≥1 test case.

URD requirementTest case(s)Status
URD-ROLE-001TC-ROLE-001✅ Covered
URD-ROLE-002TC-ROLE-011, TC-ROLE-012✅ Covered
URD-ROLE-003TC-ROLE-002✅ Covered
URD-ROLE-004TC-ROLE-003, TC-ROLE-004✅ Covered
URD-ROLE-005TC-ROLE-005✅ Covered
URD-ROLE-006TC-ROLE-006, TC-ROLE-007✅ Covered
URD-ROLE-007TC-ROLE-008✅ Covered
URD-ROLE-008TC-ROLE-009, TC-ROLE-010✅ Covered
URD-ROLE-009TC-ROLE-013✅ Covered
URD-CROLE-001TC-CROLE-001✅ Covered
URD-CROLE-002TC-CROLE-002✅ Covered
URD-CROLE-003TC-CROLE-003✅ Covered
URD-CROLE-004TC-CROLE-004✅ Covered
URD-CROLE-005TC-CROLE-001 (update path)✅ Covered
URD-CROLE-006TC-CROLE-005✅ Covered
URD-CROLE-007TC-CROLE-006✅ Covered
URD-CROLE-008TC-CROLE-003, TC-CROLE-004✅ Covered
URD-PERM-001TC-PERM-001✅ Covered
URD-PERM-002TC-PERM-002✅ Covered
URD-PERM-003TC-PERM-003✅ Covered
URD-PERM-004TC-PERM-004✅ Covered
URD-PERM-005TC-PERM-005✅ Covered
URD-GRANT-001TC-GRANT-001✅ Covered
URD-GRANT-002TC-GRANT-002✅ Covered
URD-GRANT-003TC-GRANT-003✅ Covered
URD-GRANT-004TC-GRANT-004✅ Covered
URD-GRANT-005TC-GRANT-005✅ Covered
URD-GRANT-006TC-GRANT-006✅ Covered
URD-GRANT-007TC-GRANT-006✅ Covered
URD-EFF-001TC-EFF-001✅ Covered
URD-EFF-002TC-EFF-002✅ Covered
URD-EFF-003TC-EFF-003✅ Covered
URD-EFF-004TC-EFF-004✅ Covered

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.