HCoop
/
hcoop
/
domtool2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rmuser
[hcoop/domtool2.git]
/
src
/
acl.sml
diff --git
a/src/acl.sml
b/src/acl.sml
index
6634f91
..
135e555
100644
(file)
--- a/
src/acl.sml
+++ b/
src/acl.sml
@@
-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