]> git.llucax.com Git - software/sercom.git/commitdiff
Hacer que Permiso sea un bit para manejar los permisos como máscaras de bits.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 26 Feb 2007 22:34:00 +0000 (22:34 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 26 Feb 2007 22:34:00 +0000 (22:34 +0000)
Cada vez que se instancia un Permiso, se le asigna un bit, aumentando la
posición de derecha a izzquierda (es decir, cada vez tiene asignado un entero
más grande). Esto permite hacer muy fácil operaciones lógicas para ver si tiene
varios permisos juntos o si tiene algún permiso de una lista. Además hace que
guardar los permisos en el Rol sea más simple (hay que guardar sólo un entero en
vez de una PickeCol, pero igual la columna Custom todavía no está implementada).

sercom/model.py

index 4ddab71a39fb51f70d4d0f4c5e965d9849eb7e82..9124dde8dfbb06822493e6c6473ac4aae53f8023 100644 (file)
@@ -841,7 +841,10 @@ class Rol(SQLObject): #{{{
 # No es un SQLObject porque no tiene sentido agregar/sacar permisos, están
 # hardcodeados en el código
 class Permiso(object): #{{{
+    max_valor = 1
     def __init__(self, nombre, descripcion):
+        self.valor = Permiso.max_valor
+        Permiso.max_valor <<= 1
         self.nombre = nombre
         self.descripcion = descripcion
 
@@ -853,6 +856,12 @@ class Permiso(object): #{{{
     def permission_name(self): # para identity
         return self.nombre
 
+    def __and__(self, other):
+        return self.valor & other.valor
+
+    def __or__(self, other):
+        return self.valor | other.valor
+
     def __repr__(self):
         return self.nombre
 #}}}