Added acl.grant and acl.revoke functions.
authorFrédéric Jolliton <git@frederic.jolliton.com>
Sun, 5 Nov 2006 14:01:41 +0000 (14:01 +0000)
committerFrédéric Jolliton <git@frederic.jolliton.com>
Sun, 5 Nov 2006 14:02:09 +0000 (14:02 +0000)
rsbac/acl.py

index bf1f467..bbb1ab6 100644 (file)
@@ -34,7 +34,7 @@ from ctypes import byref, pointer
 from rsbac import headers, lib, transaction
 from rsbac._data import AclRequestVector
 from rsbac.errors import raiseIfError, Error
-from rsbac._utils import fetch, intToTtl, ttlToInt, unlimitedTtl
+from rsbac._utils import fetch, intToTtl, ttlToInt, unlimitedTtl, unchangedTtl
 
 g_aclSyscallArg = headers.rsbac_acl_syscall_arg_t()
 g_aclSyscallArgRef = byref( g_aclSyscallArg )
@@ -45,6 +45,32 @@ g_aclSyscallByNameArgRef = byref( g_aclSyscallByNameArg )
 # for acl_remove_user
 g_targetId = headers.rsbac_target_id_t()
 
+@export
+def grant( subject , object , requests ) :
+    """Grant 'requests' to 'subject' for the given 'object'.
+
+    subject -- RC Role, User or ACL Group
+    object -- Object
+    requests -- RequestVector
+
+    """
+    rights , ttl = object.acl[ subject ]
+    rights |= AclRequestVector( requests )
+    object.acl[ subject ] = rights , unchangedTtl
+
+@export
+def revoke( subject , object , requests ) :
+    """Revoke 'requests' to '' for the given 'type'.
+
+    subject -- RC Role, User or ACL Group
+    object -- Object
+    requests -- RequestVector
+
+    """
+    rights , ttl = object.acl[ subject ]
+    rights &= ~AclRequestVector( requests )
+    object.acl[ subject ] = rights , unchangedTtl
+
 def _acl_preset( target , tid , subjectType , subjectId , rights , ttl ) :
     g_aclSyscallArg.target = target
     g_aclSyscallArg.tid = tid