[ 
https://issues.apache.org/jira/browse/QPID-7318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15403984#comment-15403984
 ] 

Lorenz Quack commented on QPID-7318:
------------------------------------

Patch 8
 * I think I am missing the point of {{AbstractConfiguredObjectProxy}}. I 
cannot find is being used (extended, implemented, or mocked) anywhere. So how 
would any of the {{if (source instanceof AbstractConfiguredObjectProxy)}} 
checks ever trigger?
 * {{FixedKeyMap#get}} and {{#containsKey}} have O(n ) time complexity which 
certainly breaks my expectation of a Map implementation. I see that they are 
only used for very small maps so it probabaly does not matter but still 
surprising.
 * {{FixedKeyMap$EntrySetIterator#next}} has a bug in the assignment of the 
value.

Patch 9
 * obsolete imports in {{CompoundAccessControl}}
 * {{CompoundAccessControl#authorise}} returns {{DEFER}} instead of 
{{_defaultResult}} if no underlying providers decide.
 * The CompoundAccessControl in AbstractVirtualHost has at least 2 
AccessControls - {{_systemUserAllowed}} and {{getParentAccessControl()}} - 
which both will have default priority. Would it make sense to give 
{{_systemUserAllowed}} a different default priority?
 
Patch 10 (Auto-generate acl checking for managed operations)
 * {{ConfiguredObjectFactoryGenerator#processManagedOperation}} starts with a 
semicolon
 * It might be just me but I find this idiom ugly (and it is all over 
{{ConfiguredObjectFactoryGenerator}}:{code}boolean first = true;
for(VariableElement param : methodElement.getParameters())
{
    if (first)
    {
        first = false;
    }
    else
    {
        pw.print("\", \"");
    }
    pw.print(getParamName(param));
}{code} Unfortunately the only alternative I see in Java 7 is something like 
this:{code}String s = Joiner.on("\", 
\"").join(Iterables.transform(methodElement.getParameters(), new 
Function<String, String>()
{
    @Override
    public String apply(final String input)
    {
        return input.toLowerCase();
    }
}));
pw.print(s);{code} Not sure it is worth changing. Probably not.

Patch 11, 12
 * No comment

Patch 13
 * (VH-)AccessControllProvider#getPriority is missing description

Further comments
 * There were to many style guide violations to mention. It's not even funny :(
 * {{BDBVirtualHostImpl}} still uses calls to {{authorize(Operation.UPDATE)}}. 
I believe these are covered by the automatic codegen and can die.
 * Obsolete imports in : BDBVirtualHostNodeImpl, BDBVirtualHostImpl, 
BDBHAVirtualHostNodeImpl, ConfiguredObjectFactoryGenerator, 
BrokerFileLoggerImpl, BrokerMemoryLoggerImpl, VirtualHostFileLoggerImpl, 
BrokerImpl, ... (I stopped tracking it)
 * We could add a test for the broker upgrader (adding AllowAll 
[iff|https://en.wikipedia.org/wiki/If_and_only_if] no ACL present)  
 * In various {{authorizePublish}} methods in the 1.0 protocol layer you create 
ad hoc maps instead of reusing the FixMapCreator (also not passing the 
"immediate" argument)
 * To me it is a bit unclear (it should probably be documented somewhere or at 
least the knowledge should be widely distributed in the team) when you need to 
call {{authorize}} explicitly and when it is handled automatically
 * The WMC lacks the ability to edit AccessControlProvider (priority, ACL path, 
rules). I understand this is not strictly part of this JIRA since it was mainly 
about refactoring existing functionality but we might want to capture this lack 
somehow. 
 * We might want to consider renaming {{ACLFileAccessControlProvider(-Impl)}} 
to {{AclFileAccessControlProvider(-Impl)}} (i.e., lower-casing the "cl" in 
"Acl") to be more in line with the rest of the code.
 * The name {{RuleBasedAccessControlProvider}} is IMHO unfortunate. Yes, it is 
based on rules but so is {{ACLFileAccessControlProvider}}
 * I think {{AbstractCommonRulesBasedAccessControlProvider}} should implement 
{{RuleBasedAccessControlProvider}}
 * The class hierarchy seems a bit messy. 
 ** Make CommonAccessControlProvider#getPriority a  ManagedAttribute and remove 
them from VHACP and ACP at which point they are simple marker interfaces.
 ** rename ACP to BrokerACP
 ** rename CommonACP to ACP
 ** It is a bit odd that {{RuleBasedAccessControlProvider}} and 
{{RuleBasesVirtualHostAccessControlProvider}} are virtually identical except 
for annotation content.
 ** {{AbstractCommonRuleBasedAccessControlProvider}} contains the 
implementation of all the methods of the {{RuleBased(VH)AccessControlProvider}} 
but does not inherit either.  I guess I understand the reason for it 
(semantically the children of ACRBACP are disjunct but it clouds the 
implementation (not semantic) relationship a little bit since we cannot use 
@Override
 ** Which part of {{AbstractLegacyAccessControlProvider}} is Legacy specific? 
The non-legacy {{AbstractCommonRulesBasedAccessControlProvider}} also extends 
this.
 * {{Rule}} and {{AclRule}}. Are they really distinct? {{Rule}} seems to be 
coupled to Acl by it having {{AclAction}} in it's public interface.
 * In the most parts of the code the Acl* names refer to the legacy code. Here 
it seems to be reversed, the {{Rule}} and {{RuleSet}} classes are from the 
legacy world whereas the {{AclRule}} is from the "RuleBased" world.
 * {{AbstractCommonRulesBasedAccessControlProvider}} should be renamed to 
{{AbstractCommonRuleBasedAccessControlProvider}} (i.e., "Rule" instead of 
"Rules")
 * I would put "Legacy" into the name of the ManagedOperation 
{{AbstractCommonRulesBasedAccessControlProvider#extractRules}}
 * IMHO, {{AbstractCommonRulesBasedAccessControlProvider#getRules}} should 
return a unmodifiableList

> [Java Broker] Refactor existing ACL plugin code
> -----------------------------------------------
>
>                 Key: QPID-7318
>                 URL: https://issues.apache.org/jira/browse/QPID-7318
>             Project: Qpid
>          Issue Type: Improvement
>          Components: Java Broker
>            Reporter: Rob Godfrey
>            Assignee: Rob Godfrey
>             Fix For: qpid-java-6.1
>
>
> While the aim is to redesign the ACL implementation in the v6.2 or v7.0 
> timeframe, there is still utility in tidying up the existing ACL 
> implementation a bit.  In particular by separating out functions and 
> providing a better encapsulation, we will make the job of writing automated 
> upgraders to any new ACL implementation substantially easier.
> As a first step we can separate out the parsing of the ACL file, from the 
> "rule based" implementation of ACLs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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

Reply via email to