You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Dave Newton (JIRA)" <ji...@apache.org> on 2013/06/19 20:57:20 UTC
[jira] [Comment Edited] (WW-4117) RolesInterceptor ignores
disallowedRoles when allowedRoles are configured
[ https://issues.apache.org/jira/browse/WW-4117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13688147#comment-13688147 ]
Dave Newton edited comment on WW-4117 at 6/19/13 6:56 PM:
----------------------------------------------------------
{{allowedRoles}} is a whitelist; it *should* ignore disallowedRoles if configured, no? IMO configuring *both* would be more confusing and error-prone.
I'd think it'd look roughly like:
{code}
protected boolean isAllowed(HttpServletRequest request, Object action) {
if (allowedRoles.size() > 0) {
return processAllowedRoles();
}
if (disallowedRoles.size() > 0) {
return processDisallowedRoles();
}
return true;
}
protected boolean processAllowedRoles() {
for (String role : allowedRoles) {
if (request.isUserInRole(role)) {
return true;
}
}
return false;
}
protected boolean processDisallowedRoles() {
for (String role : disallowedRoles) {
if (request.isUserInRole(role)) {
return false;
}
}
return true;
}
{code}
(Delta an additional refactor if it's important.)
was (Author: newton_dave):
It looks like the issue is the {{return true}} part, it should be {{return result}}.
{{allowedRoles}} is a whitelist; it *should* ignore disallowedRoles if configured, no? IMO configuring *both* would be more confusing and error-prone.
I'd think it'd look roughly like:
{code}
protected boolean isAllowed(HttpServletRequest request, Object action) {
if (allowedRoles.size() > 0) {
return processAllowedRoles();
}
if (disallowedRoles.size() > 0) {
return processDisallowedRoles();
}
return true;
}
protected boolean processAllowedRoles() {
for (String role : allowedRoles) {
if (request.isUserInRole(role)) {
return true;
}
}
return false;
}
protected boolean processDisallowedRoles() {
for (String role : disallowedRoles) {
if (request.isUserInRole(role)) {
return false;
}
}
return true;
}
{code}
(Delta an additional refactor if it's important.)
> RolesInterceptor ignores disallowedRoles when allowedRoles are configured
> -------------------------------------------------------------------------
>
> Key: WW-4117
> URL: https://issues.apache.org/jira/browse/WW-4117
> Project: Struts 2
> Issue Type: Bug
> Components: Core Interceptors
> Reporter: Cam Morris
> Attachments: patch.txt
>
>
> The isAllowed method of RolesInterceptor does not enforce the disallowedRoles when allowedRoles are configured. ex:
> {code}
> <interceptor-ref name="roles">
> <param name="allowedRoles">authenticated</param>
> <param name="disallowedRoles">restrictedUser</param>
> </interceptor-ref>
> {code}
> With the above configuration a user with the roles "authenticated", and "restrictedUser" would be granted access.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira