Added an example of using an anonymous executable as an access control.
parent
c36e2ef227
commit
34d4b94ab5
|
@ -41,7 +41,7 @@ If only compiled code can be executed, then it seems to me that having access to
|
||||||
Thus the default access list is the read access list; every cell has an access list. What do its possible values mean?
|
Thus the default access list is the read access list; every cell has an access list. What do its possible values mean?
|
||||||
|
|
||||||
1. **T** everyone can read this;
|
1. **T** everyone can read this;
|
||||||
2. An executable function of two arguments: the current user can read the cell if the function, when passed as arguments the current user and the cell to which access is requested, returns **T**;
|
2. An executable function of two arguments: the current user can read the cell if the function, when passed as arguments the current user and the cell to which access is requested, returns **T** or a list of names as below, and the user is present on that list;
|
||||||
3. A list of names: true if the value of one of those names is the user object of the current user, or is a group which contains the user object of the current user.
|
3. A list of names: true if the value of one of those names is the user object of the current user, or is a group which contains the user object of the current user.
|
||||||
|
|
||||||
If there's anything on the list which isn't a name it's ignored. Any value of the access list which isn't **T**, an executable function, of a list of names is problematic; we either have to treat it as **T** (everyone) or as **NIL** (either no-one or system-only). We should probably flag an error if an attempt is made to create a cell with an invalid access list. Access control list cells also clearly have their own access control lists; there is a potential for very deep recursion and consequently poor performance here, so it will be desirable to keep such access control lists short or just **T**. Obviously, if you can't read an access control list you can't read the cell that it guards.
|
If there's anything on the list which isn't a name it's ignored. Any value of the access list which isn't **T**, an executable function, of a list of names is problematic; we either have to treat it as **T** (everyone) or as **NIL** (either no-one or system-only). We should probably flag an error if an attempt is made to create a cell with an invalid access list. Access control list cells also clearly have their own access control lists; there is a potential for very deep recursion and consequently poor performance here, so it will be desirable to keep such access control lists short or just **T**. Obviously, if you can't read an access control list you can't read the cell that it guards.
|
||||||
|
@ -103,6 +103,19 @@ Suppose I want to permanently add Anne and Bill to my normal friends:
|
||||||
|
|
||||||
_Here I'm presuming that **environment** is bound to the value of **system.users.simon.environment**, and that unqualified names are searched for first in my own environment._
|
_Here I'm presuming that **environment** is bound to the value of **system.users.simon.environment**, and that unqualified names are searched for first in my own environment._
|
||||||
|
|
||||||
|
Suppose I want everyone to be able to play a game, but only outside working hours; and for my friends to be able to play it additionally at lunchtime:
|
||||||
|
|
||||||
|
(with-open-access-control
|
||||||
|
(compile
|
||||||
|
(lambda (user cell)
|
||||||
|
(let ((time (get-current-time)))
|
||||||
|
(cond
|
||||||
|
((< time 09:00) T)
|
||||||
|
((> time 17:00) T)
|
||||||
|
((and (> time 12:30)(< time 13:30)) friends)
|
||||||
|
(T NIL)))))
|
||||||
|
(rebind! 'system.users.simon.exec.excellent-game (compile excellent-game)))
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
Security is hard to do well, and all this requires careful further thought, in part because the proposed post-scarcity environment is so unlike any existing software environment.
|
Security is hard to do well, and all this requires careful further thought, in part because the proposed post-scarcity environment is so unlike any existing software environment.
|
||||||
|
|
Loading…
Reference in a new issue