Hi all,

In some of my servlets I have dynamic actions - by this I mean actions which
may or may not be permissible, depending on the logged-in user.  So my code
might look like:
    
    def actions(self):
        alist = super(MyServlet, self).actions()  # get actions from super
        if self.user().playsRole('admin'):
            alist.append("deleteFrobber")
        return alist

Nothing in the Webware documentation led me to think that this was not allowed,
but I've recently discovered that Page caches a list of actions in the 
Page._actionSet() method:

    def _actionSet(self):
        """ Returns a dictionary whose keys are the names
        returned by actions(). The dictionary is used for a
        quick set-membership-test in self._respond. Subclasses
        don't generally override this method or invoke it. """         if not 
hasattr(self, '_actionDict'):
            self._actionDict = {}
            for action in self.actions():
                self._actionDict[action] = 1
        return self._actionDict

This method is marked as "private utility" and the only code which uses it is
this snippet from Page._respond():

        # Check for actions
        for action in self.actions():
            if req.hasField('_action_%s' % action) or \
               req.field('_action_', None) == action or \
               (req.hasField('_action_%s.x' % action) and \
                req.hasField('_action_%s.y' % action)):
                if self._actionSet().has_key(action):
                    self.handleAction(action)
                    return

It appears that the _actionSet() caching was added for performance reasons
back when "old style actions" were used.  However in the above code I don't 
think the "if self._actionSet().has_key(action)" test could ever fail because
that test is enclosed by the "for action in self.actions()" loop.  If the 
action is in self.actions(), it's going to be in self._actionSet() too.  

So I'd like to remove the "if self._actionSet().has_key(action)" test from the 
above snippet, seeing as it doesn't seem to be of any benefit anyways, which 
will allow use of dynamic actions.

Does anyone see a problem with doing this?  I wanted to check in before I 
proceed just in case I've overlooked something...

--
Jason D. Hildebrand
[EMAIL PROTECTED]



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Webware-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/webware-devel

Reply via email to