[Zope3-dev] Using classes as constants for security settings
Casey Duncan
casey_duncan@yahoo.com
Sun, 17 Feb 2002 18:17:55 -0800 (PST)
I would say this is the most descriptive all around
solution. I imagine the only reason to change it would
be if some other type gave significant performance
advantages over classes for some reason. I don't see
why that should be tho.
-Casey
--- Steve Spicklemire <steve@spvi.com> wrote:
> Hi Steve,
>
> Good show! The only thing I can think of, is that
> this will be
> heavily used code, and could be a target for
> optimization later. But,
> with the new class/type unification, it doesn't seem
> likely that this
> will be a problem. It also seems unlikely that these
> classes will really
> "do" anything in their primary function as "constant
> state holders" so
> I'd say "check it in!"
>
> -steve
>
> On Sunday, February 17, 2002, at 08:58 AM, Steve
> Alexander wrote:
>
> > I've been playing around with various ways of
> getting symbolic
> > constants that stay constant when you pickle and
> later unpickle them.
> >
> > Here's what I've come up with. This works as a
> replacement for
> > Zope/App/Security/Settings.py.
> >
> > ----
> > """ Security setting constants """
> >
> > class PermissionSettingMetaClass(type):
> > def __init__(self, name, bases, namespace):
> > type.__init__(self, name, bases,
> namespace)
> > self._name=name
> >
> > def __str__(self):
> > return "PermissionSetting: %s" %
> self._name
> >
> > def _setDescription(self, description):
> > self._description=description
> >
> > def getDescription(self):
> > return self._description
> >
> >
> > class PermissionSetting(object):
> > __metaclass__=PermissionSettingMetaClass
> > def __init__(self):
> > raise TypeError, "Cannot instantiate
> PermissionSettings"
> >
> > # Explicit allow setting for permissions
> > class Allow(PermissionSetting): pass
> > Allow._setDescription("Explicit allow setting for
> permissions")
> >
> > # Explicit deny setting for permissions
> > class Deny(PermissionSetting): pass
> >
> > # Unset constant that denotes no setting for
> permission and role
> > class Unset(PermissionSetting): pass
> >
> > # Explicit assign setting for roles
> > class Assign(PermissionSetting): pass
> >
> > # Explicit remove setting for roles
> > class Remove(PermissionSetting): pass
> >
> > ----
> >
> > I have tested this, and several variations.
> >
> > There will only ever be one Allow class. The FQN
> of Allow is what gets
> > stored with pickled objects.
> >
> > However, we can add methods and descriptions to
> Allow, and other
> > permissions, by creating methods in
> PermissionSettingMetaClass.
> >
> > We can create __str__ and __repr__ methods on
> > PermissionSettingMetaClass to make the individual
> permissions say
> > something meaningful when printed.
> >
> >
> > The choice for Settings.py is now as follows:
> >
> > * Numbers for the values of Allow, Deny, Unset
> etc.
> >
> > * Strings for the values of Allow, Deny, Unset
> etc., and we always
> > compare by equality, not identity
> >
> > * Classes as symbolic constants, as above.
> Comparing by identity is
> > fine.
> >
> > Any opinions?
> >
> > --
> > Steve Alexander
> >
> >
> > _______________________________________________
> > Zope3-dev mailing list
> > Zope3-dev@zope.org
> > http://lists.zope.org/mailman/listinfo/zope3-dev
>
__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com