;; lib/acl/facts.sx — EDB fact constructors. ;; ;; Each constructor returns a Datalog fact tuple (a list whose head is the ;; predicate symbol). These are the only shapes lib/acl/engine.sx feeds to ;; lib/datalog/. ;; Phase 1: actor/resource/grant/deny. ;; Phase 2: member_of (subject -> group/role), child_of (resource -> parent), ;; role_grant (role -> action,resource capability). ;; Phase 4: peer/trust/delegate/level_covers (federation). (define acl-actor (fn (id kind) (list (quote actor) id kind))) (define acl-resource-fact (fn (id kind) (list (quote resource) id kind))) (define acl-grant (fn (subj act res) (list (quote grant) subj act res))) (define acl-deny (fn (subj act res) (list (quote deny) subj act res))) ;; subject S is a member of group/role G (one hop; transitivity is derived). (define acl-member-of (fn (subj grp) (list (quote member_of) subj grp))) ;; resource R is a child of parent P (one hop; transitivity is derived). (define acl-child-of (fn (res parent) (list (quote child_of) res parent))) ;; role confers capability (act on res) to every member of the role. (define acl-role-grant (fn (role act res) (list (quote role_grant) role act res))) ;; --- federation --- ;; a known peer instance at addr, of some kind (e.g. peer). (define acl-peer (fn (addr kind) (list (quote peer) addr kind))) ;; local trust in a peer at a named level. Gates delegated grants at query time. (define acl-trust (fn (peer level) (list (quote trust) peer level))) ;; a peer asserts that subject S may A on R. Only takes effect if local trust in ;; that peer covers action A (see level_covers). (define acl-delegate (fn (peer subj act res) (list (quote delegate) peer subj act res))) ;; local policy: trust `level` authorises delegated grants for action `act`. (define acl-level-covers (fn (level act) (list (quote level_covers) level act)))