import urn_to_hrn
[sfa.git] / sfa / trust / rights.py
index c96703b..14749cb 100644 (file)
@@ -24,9 +24,11 @@ privilege_table = {"authority": ["register", "remove", "update", "resolve", "lis
                    "sa": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "deleteslice", "deletesliver", "updateslice",
                           "getsliceresources", "getticket", "loanresources", "stopslice", "startslice", "renewsliver",
                           "deleteslice", "deletesliver", "resetslice", "listslices", "listnodes", "getpolicy", "sliverstatus"],
-                   "embed": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "renewsliver", "deleteslice", "deletesliver", "updateslice", "sliverstatus", "getsliceresources", "shutdown"],
+                   "embed": ["getticket", "redeemslice", "redeemticket", "createslice", "createsliver", "renewsliver", "deleteslice", 
+                             "deletesliver", "updateslice", "sliverstatus", "getsliceresources", "shutdown"],
                    "bind": ["getticket", "loanresources", "redeemticket"],
-                   "control": ["updateslice", "createslice", "createsliver", "renewsliver", "sliverstatus", "stopslice", "startslice", "deleteslice", "deletesliver", "resetslice", "getsliceresources", "getgids"],
+                   "control": ["updateslice", "createslice", "createsliver", "renewsliver", "sliverstatus", "stopslice", "startslice", 
+                               "deleteslice", "deletesliver", "resetslice", "getsliceresources", "getgids"],
                    "info": ["listslices", "listnodes", "getpolicy"],
                    "ma": ["setbootstate", "getbootstate", "reboot", "getgids", "gettrustedcerts"],
                    "operator": ["gettrustedcerts", "getgids"],                   
@@ -35,7 +37,7 @@ privilege_table = {"authority": ["register", "remove", "update", "resolve", "lis
 
 
 ##
-# Determine tje rights that an object should have. The rights are entirely
+# Determine the rights that an object should have. The rights are entirely
 # dependent on the type of the object. For example, users automatically
 # get "refresh", "resolve", and "info".
 #
@@ -55,10 +57,10 @@ def determine_rights(type, name):
         rl.add("refresh")
         rl.add("resolve")
         rl.add("info")
-    elif type == "sa":
+    elif type in ["sa", "authority+sa"]:
         rl.add("authority")
         rl.add("sa")
-    elif type == "ma":
+    elif type in ["ma", "authority+ma", "cm", "authority+cm"]:
         rl.add("authority")
         rl.add("ma")
     elif type == "authority":
@@ -198,6 +200,7 @@ class Rights:
     # @param op_name is an operation to check, for example "listslices"
 
     def can_perform(self, op_name):
+        
         for right in self.rights:
             if right.can_perform(op_name):
                 return True
@@ -217,6 +220,7 @@ class Rights:
             for my_right in self.rights:
                 if my_right.is_superset(child_right):
                     allowed = True
+                    break
             if not allowed:
                 return False
         return True
@@ -266,10 +270,10 @@ class Rights:
             rl.add("refresh")
             rl.add("resolve")
             rl.add("info")
-        elif type == "sa":
+        elif type in ["sa", "authority+sa"]:
             rl.add("authority")
             rl.add("sa")
-        elif type == "ma":
+        elif type in ["ma", "authority+ma", "cm", "authority+cm"]:
             rl.add("authority")
             rl.add("ma")
         elif type == "authority":