More work to straighten out permissions
Showing
2 changed files
with
24 additions
and
17 deletions
| ... | @@ -22,6 +22,7 @@ | ... | @@ -22,6 +22,7 @@ |
| 22 | <moqui.security.ArtifactGroup artifactGroupId="McpRestPaths" description="MCP REST API Paths"/> | 22 | <moqui.security.ArtifactGroup artifactGroupId="McpRestPaths" description="MCP REST API Paths"/> |
| 23 | <moqui.security.ArtifactGroup artifactGroupId="McpScreenTransitions" description="MCP Screen Transitions"/> | 23 | <moqui.security.ArtifactGroup artifactGroupId="McpScreenTransitions" description="MCP Screen Transitions"/> |
| 24 | <moqui.security.ArtifactGroup artifactGroupId="McpBusinessServices" description="MCP Essential Business Services"/> | 24 | <moqui.security.ArtifactGroup artifactGroupId="McpBusinessServices" description="MCP Essential Business Services"/> |
| 25 | <moqui.security.ArtifactGroup artifactGroupId="McpSecurityEntities" description="Security entities needed for permission checks"/> | ||
| 25 | 26 | ||
| 26 | <!-- MCP Artifact Group Members --> | 27 | <!-- MCP Artifact Group Members --> |
| 27 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="McpServices.*" artifactTypeEnumId="AT_SERVICE"/> | 28 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="McpServices.*" artifactTypeEnumId="AT_SERVICE"/> |
| ... | @@ -63,6 +64,10 @@ | ... | @@ -63,6 +64,10 @@ |
| 63 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | 64 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> |
| 64 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="create#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | 65 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="create#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> |
| 65 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="update#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> | 66 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="update#moqui.server.Visit" artifactTypeEnumId="AT_ENTITY"/> |
| 67 | <!-- Security Entity Access for permission checking --> | ||
| 68 | <moqui.security.ArtifactGroupMember artifactGroupId="McpSecurityEntities" artifactName="moqui.security.ArtifactGroupMember" artifactTypeEnumId="AT_ENTITY"/> | ||
| 69 | <moqui.security.ArtifactGroupMember artifactGroupId="McpSecurityEntities" artifactName="moqui.security.UserGroupMember" artifactTypeEnumId="AT_ENTITY"/> | ||
| 70 | <moqui.security.ArtifactGroupMember artifactGroupId="McpSecurityEntities" artifactName="moqui.security.ArtifactAuthz" artifactTypeEnumId="AT_ENTITY"/> | ||
| 66 | <!-- Basic Services --> | 71 | <!-- Basic Services --> |
| 67 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#ServerNodeInfo" artifactTypeEnumId="AT_SERVICE"/> | 72 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#ServerNodeInfo" artifactTypeEnumId="AT_SERVICE"/> |
| 68 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#SystemInfo" artifactTypeEnumId="AT_SERVICE"/> | 73 | <moqui.security.ArtifactGroupMember artifactGroupId="McpServices" artifactName="org.moqui.impl.BasicServices.get#SystemInfo" artifactTypeEnumId="AT_SERVICE"/> |
| ... | @@ -74,20 +79,26 @@ | ... | @@ -74,20 +79,26 @@ |
| 74 | <moqui.security.ArtifactAuthz userGroupId="McpUser" artifactGroupId="McpRestPaths" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | 79 | <moqui.security.ArtifactAuthz userGroupId="McpUser" artifactGroupId="McpRestPaths" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> |
| 75 | <moqui.security.ArtifactAuthz userGroupId="McpUser" artifactGroupId="McpScreenTransitions" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | 80 | <moqui.security.ArtifactAuthz userGroupId="McpUser" artifactGroupId="McpScreenTransitions" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> |
| 76 | 81 | ||
| 82 | <!-- Give ALL users access to security entities needed for permission checks --> | ||
| 83 | <moqui.security.ArtifactAuthz userGroupId="ALL_USERS" artifactGroupId="McpSecurityEntities" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | ||
| 84 | |||
| 85 | <!-- Ensure ADMIN user always has access to security entities needed for permission checks --> | ||
| 86 | <moqui.security.ArtifactAuthz userGroupId="ADMIN" artifactGroupId="McpServices" authzTypeEnumId="AUTHZT_ALWAYS" authzActionEnumId="AUTHZA_ALL"/> | ||
| 87 | |||
| 77 | <!-- MCP Business Group Authz --> | 88 | <!-- MCP Business Group Authz --> |
| 78 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpServices" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | 89 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpServices" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> |
| 79 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpBusinessServices" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | 90 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpBusinessServices" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> |
| 80 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpRestPaths" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> | 91 | <moqui.security.ArtifactAuthz userGroupId="MCP_BUSINESS" artifactGroupId="McpRestPaths" authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/> |
| 92 | |||
| 81 | 93 | ||
| 82 | <!-- MCP User Accounts --> | 94 | <!-- MCP User Accounts --> |
| 83 | <moqui.security.UserAccount userId="MCP_USER" username="mcp-user" currentPassword="16ac58bbfa332c1c55bd98b53e60720bfa90d394" passwordHashType="SHA"/> | 95 | <moqui.security.UserAccount userId="MCP_USER" username="mcp-user" currentPassword="16ac58bbfa332c1c55bd98b53e60720bfa90d394" passwordHashType="SHA"/> |
| 84 | <moqui.security.UserAccount userId="MCP_BUSINESS" username="mcp-business" currentPassword="16ac58bbfa332c1c55bd98b53e60720bfa90d394" passwordHashType="SHA"/> | 96 | <moqui.security.UserAccount userId="MCP_BUSINESS" username="mcp-business" currentPassword="16ac58bbfa332c1c55bd98b53e60720bfa90d394" passwordHashType="SHA"/> |
| 85 | <moqui.security.UserAccount userId="ADMIN" username="ADMIN" currentPassword="16ac58bbfa332c1c55bd98b53e60720bfa90d394" passwordHashType="SHA"/> | ||
| 86 | 97 | ||
| 87 | <!-- Add MCP users to MCP user groups --> | 98 | <!-- Add MCP users to MCP user groups --> |
| 88 | <moqui.security.UserGroupMember userGroupId="McpUser" userId="MCP_USER" fromDate="2025-01-01 00:00:00.000"/> | 99 | <moqui.security.UserGroupMember userGroupId="McpUser" userId="MCP_USER" fromDate="2025-01-01 00:00:00.000"/> |
| 89 | <moqui.security.UserGroupMember userGroupId="MCP_BUSINESS" userId="MCP_BUSINESS" fromDate="2025-01-01 00:00:00.000"/> | 100 | <moqui.security.UserGroupMember userGroupId="MCP_BUSINESS" userId="MCP_BUSINESS" fromDate="2025-01-01 00:00:00.000"/> |
| 90 | <moqui.security.UserGroupMember userGroupId="McpUser" userId="ADMIN" fromDate="2025-01-01 00:00:00.000"/> | 101 | <!-- ADMIN user doesn't need to be in MCP groups - should have full access by default --> |
| 91 | 102 | ||
| 92 | <!-- Add existing demo users to MCP business group for focused testing --> | 103 | <!-- Add existing demo users to MCP business group for focused testing --> |
| 93 | <moqui.security.UserGroupMember userGroupId="MCP_BUSINESS" userId="ORG_ZIZI_JD" fromDate="2025-01-01 00:00:00.000"/> | 104 | <moqui.security.UserGroupMember userGroupId="MCP_BUSINESS" userId="ORG_ZIZI_JD" fromDate="2025-01-01 00:00:00.000"/> | ... | ... |
| ... | @@ -575,24 +575,20 @@ | ... | @@ -575,24 +575,20 @@ |
| 575 | // Store original username for permission checks | 575 | // Store original username for permission checks |
| 576 | def originalUsername = ec.user.username | 576 | def originalUsername = ec.user.username |
| 577 | 577 | ||
| 578 | // Get user's accessible entities in a single query for efficiency | 578 | // Get user's accessible entities using Moqui's built-in permission checking |
| 579 | def userAccessibleEntities = null as Set<String> | 579 | def userAccessibleEntities = null as Set<String> |
| 580 | // Query ArtifactGroupMembers directly to get all entities user can access | 580 | |
| 581 | UserInfo adminUserInfo = null | 581 | // Get all entity names and filter using Moqui's permission system |
| 582 | try { | 582 | def allEntityNames = ec.entity.getAllEntityNames() |
| 583 | adminUserInfo = ec.user.pushUser("ADMIN") | 583 | userAccessibleEntities = [] |
| 584 | def artifactGroupMembers = ec.entity.find("moqui.security.ArtifactGroupMember") | 584 | |
| 585 | .condition("artifactTypeEnumId", "AT_ENTITY") | 585 | for (entityName in allEntityNames) { |
| 586 | .condition("userGroupId", ec.user.getUserGroupsIdSet().collect { it.userGroupId }) | 586 | // Use Moqui's built-in permission checking |
| 587 | .selectFields("artifactName") | 587 | if (ec.user.hasPermission("entity:${entityName}".toString())) { |
| 588 | .distinct(true) | 588 | userAccessibleEntities << entityName |
| 589 | .list() | ||
| 590 | userAccessibleEntities = artifactGroupMembers.collect { it.artifactName } as Set<String> | ||
| 591 | } finally { | ||
| 592 | if (adminUserInfo != null) { | ||
| 593 | ec.user.popUser() | ||
| 594 | } | 589 | } |
| 595 | } | 590 | } |
| 591 | userAccessibleEntities = userAccessibleEntities as Set<String> | ||
| 596 | 592 | ||
| 597 | // Helper function to check if user has permission to an entity | 593 | // Helper function to check if user has permission to an entity |
| 598 | def userHasEntityPermission = { entityName -> | 594 | def userHasEntityPermission = { entityName -> | ... | ... |
-
Please register or sign in to post a comment