Re: ContactAdmin misnomer?

mario ruggier <[email protected]>
Newsgroups gmane.comp.web.quixote.user
Message-ID <[email protected]>
Thanks. It is very nice and simple. A few comments:

While we are talking about names, should'nt that be "grantee" and not 
"granter" ?
Just to clarify, what grant() does may be simply said:
	Subject (user self) : Verb (permission) : Object (receiver of the 
allowed action)
And, when object is just True, then the subject is granted the 
permission open-endedly...

Plus, what about revoke instead of ungrant?

For expiring permissions (such as valid paid subscription), one would 
need to customize is_granted(), e.g. to call a specific function that 
checks the validity of the permission? So, persisting this info does 
not seem like such a good idea... Unless, a permissions can be 
scheduled, e.g., with a start and end date, the is_granted() check can 
therefore be self-contained. And how the start and end-dates are set 
will be external application logic.

mario



On Oct 7, 2005, at 10:39 PM, David Binger wrote:

# PersistentSet is a new durus type.
# string is a new spec that includes unicodes and ascii strs.

class Permissions (PersistentDict):

     data_is = {string:sequence(either(Persistent, True), PersistentSet)}

     def grant(self, permission, granter):
         require(permission, string)
         require(granter, either(Persistent, True))
         if permission not in self:
             self[permission] = PersistentSet([granter])
         else:
             self[permission].add(granter)

     def ungrant(self, permission, granter):
         require(permission, string)
         require(granter, either(Persistent, True))
         if self.is_granted(permission, granter):
             self.data[permission].remove(granter)
             if len(self.data[permission]) == 0:
                 del self.data[permission]

     def is_granted(self, permission, granter):
         return granter in self.get(permission, [])

class DulcineaUser(DulcineaPersistent):

     global_permissions = {
         "act-as":
             "Allow to act as another user.",
         "create-users":
             "Allow the creation of other users.",
         "manage-permissions":
             "Allow changing of permissions.",
         "staff":
             "Is a member of the staff",
         "system":
             "Allow to do things normally done by the software system.",
         }

     permissions_is = Permissions

     ...

     def is_admin(self):
         return self.is_granted('staff')

     def is_granted(self, permission, granter=True):
         return self.get_permissions().is_granted(permission, granter)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.