Eduard Wirch created SHIRO-902:
----------------------------------

             Summary: Separator conflict between 
PermissionUtils.resolveDelimitedPermissions() and 
WildcardPermission.SUBPART_DIVIDER_TOKEN
                 Key: SHIRO-902
                 URL: https://issues.apache.org/jira/browse/SHIRO-902
             Project: Shiro
          Issue Type: Bug
          Components: Authorization (access control) 
    Affects Versions: 1.10.1
            Reporter: Eduard Wirch


PermissionUtils.resolveDelimitedPermissions() accepts multiple permissions, 
separated by comma. But comma is already reserved by 
WildcardPermission.SUBPART_DIVIDER_TOKEN.

 

Example: "user:read,write:*"

Expected:

{{parts: [}}{{  ["user"],}}{{  ["read", "write"],}}{{{}  
["*"]{}}}{{{}]{}}}{{{}Actual:{}}}

{{WildcardPermission.parts: [}}{{  ["user"],}}{{{}  
["read"]{}}}{{{}],{}}}{{{}WildcardPermission.parts: [{}}}{{  ["write"],}}{{{}  
["*"]{}}}{{{}]{}}}{{{}{}}}

JUnit test to trigger the bug:

{{import static org.assertj.core.api.Assertions.assertThat;}}

{{import org.apache.shiro.authz.permission.WildcardPermission;}}
{{import org.apache.shiro.authz.permission.WildcardPermissionResolver;}}
{{import org.apache.shiro.util.PermissionUtils;}}
{{import org.junit.jupiter.api.Test;}}

{{public class PermissionUtilsTest {}}
{{    @Test}}
{{    void verifyResolveDelimitedPermissionsRespectsSubPartDividerToken() {}}
{{        var permissionResolver = new WildcardPermissionResolver(true);}}
{{        var result = 
PermissionUtils.resolveDelimitedPermissions("user:read,write:*", 
permissionResolver);}}
{{        assertThat(result)}}
{{            .containsExactlyInAnyOrder(}}
{{                new WildcardPermission("user:read,write:*")}}
{{            );}}
{{    }}}
{{}}}

 

I understand, that PermissionUtils actually cannot know about 
WildcardPermission.SUBPART_DIVIDER_TOKEN, because it is hidden behind the 
PermissionResolver abstraction. But WildcardPermissionResolver is the only 
resolver you provide. PermissionUtils should support using it.

I also understand that the fix will be a breaking change, which should usually 
be avoided in public APIs. But also consider, that every new user using 
PermissionUtils will waste time debugging this bug, and then will avoid using 
resolveDelimitedPermissions(). What's the purpose of a stable but unused API?

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to