SS.delete (values, value)
else
values
+
+ val classes = if SS.isEmpty values then
+ (#1 (SM.remove (classes, class)))
+ handle NotFound => classes
+ else
+ SM.insert (classes, class, values)
in
- acl := SM.insert (!acl, user,
- SM.insert (classes, class,
- values))
+ if SM.numItems classes = 0 then
+ (acl := #1 (SM.remove (!acl, user)))
+ handle NotFound => ()
+ else
+ acl := SM.insert (!acl, user, classes)
end
fun revokeFromAll {class, value} =
TextIO.closeOut outf
end
+fun queryDomain {user, domain} =
+ let
+ fun trySuffix parts =
+ case parts of
+ [] => false
+ | first :: rest =>
+ query {user = user, class = "domain", value = String.concatWith "." parts}
+ orelse trySuffix rest
+ in
+ trySuffix (String.fields (fn ch => ch = #".") domain)
+ end
+
end