On Oct 7, 2005, at 2:42 PM, mario ruggier wrote:

I'd be interested to understand how you have modeled it now. I do not need any conversion utilities... looking at the code (and examples... ;-) would be very much appreciated.

# 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)




_______________________________________________
Quixote-users mailing list
[email protected]
http://mail.mems-exchange.org/mailman/listinfo/quixote-users

Reply via email to