whohas
[hcoop/domtool2.git] / src / acl.sml
index d0b41fe..e57f186 100644 (file)
@@ -37,6 +37,23 @@ fun query {user, class, value} =
            NONE => false
          | SOME values => SS.member (values, value)
 
            NONE => false
          | SOME values => SS.member (values, value)
 
+fun queryAll user =
+    case SM.find (!acl, user) of
+       NONE => []
+      | SOME classes => SM.foldri (fn (class, values, out) =>
+                                     (class, SS.foldr (op::) [] values) :: out)
+                                 [] classes
+
+fun whoHas {class, value} =
+    SM.foldri (fn (user, classes, users) =>
+                 case SM.find (classes, class) of
+                     NONE => users
+                   | SOME values =>
+                     if SS.member (values, value) then
+                         user :: users
+                     else
+                         users) [] (!acl)
+
 fun class {user, class} =
     case SM.find (!acl, user) of
        NONE => SS.empty
 fun class {user, class} =
     case SM.find (!acl, user) of
        NONE => SS.empty