Rmuser
[hcoop/domtool2.git] / src / acl.sml
index 6634f91..135e555 100644 (file)
@@ -44,6 +44,8 @@ fun queryAll user =
                                      (class, SS.foldr (op::) [] values) :: out)
                                  [] classes
 
                                      (class, SS.foldr (op::) [] values) :: out)
                                  [] classes
 
+fun users () = SM.foldri (fn (user, _, ls) => user :: ls) [] (!acl)
+
 fun whoHas {class, value} =
     SM.foldri (fn (user, classes, users) =>
                  case SM.find (classes, class) of
 fun whoHas {class, value} =
     SM.foldri (fn (user, classes, users) =>
                  case SM.find (classes, class) of
@@ -62,6 +64,10 @@ fun class {user, class} =
            NONE => SS.empty
          | SOME values => values
 
            NONE => SS.empty
          | SOME values => values
 
+fun rmuser user =
+    (acl := #1 (SM.remove (!acl, user)))
+    handle NotFound => ()
+
 fun grant {user, class, value} =
     let
        val classes = Option.getOpt (SM.find (!acl, user), SM.empty)
 fun grant {user, class, value} =
     let
        val classes = Option.getOpt (SM.find (!acl, user), SM.empty)
@@ -87,6 +93,14 @@ fun revoke {user, class, value} =
                                     values))
     end
 
                                     values))
     end
 
+fun revokeFromAll {class, value} =
+    acl := SM.map (fn classes =>
+                     case SM.find (classes, class) of
+                         NONE => classes
+                       | SOME values =>
+                         ((SM.insert (classes, class, SS.delete (values, value)))
+                          handle NotFound => classes)) (!acl)
+
 fun read fname =
     let
        val inf = TextIO.openIn fname
 fun read fname =
     let
        val inf = TextIO.openIn fname