From: Leandro Lucarella Date: Mon, 26 Feb 2007 22:34:00 +0000 (+0000) Subject: Hacer que Permiso sea un bit para manejar los permisos como máscaras de bits. X-Git-Tag: pre-merge~77 X-Git-Url: https://git.llucax.com/z.facultad/75.52/sercom.git/commitdiff_plain/088a8f0a8c98d0a7c536dffe859ea46c508cac4b?hp=4ad9a93a62ad9629de45e53270442e2be70049b6 Hacer que Permiso sea un bit para manejar los permisos como máscaras de bits. 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). --- diff --git a/sercom/model.py b/sercom/model.py index 4ddab71..9124dde 100644 --- a/sercom/model.py +++ b/sercom/model.py @@ -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 #}}}