User Management Requirements
Gw
Advisor/Customer:
Eelco Dolstra
GW should support the creation of users for the following reasons:
- To provide access control - not everybody might be allowed to edit or view some pages.
- To provide per-user customisation: preferences, style sheets, etc. (user management should be restricted to provide pointers to the preferred resources; stylesheets are in the rendering and templates package)
- To provide edit traceability - who edited what?
Requirements
Make it possible to create and edit users. The information maintained
for each user should be flexible (so that arbitrary properties can be
added later on), but should included at least the full name and e-mail
address.
Make it possible to create and edit ACLs (access control lists) that
define who has the right to do what.
The most important access rights that must be implemented are read and
write access. A more interesting access right is who has the ability
to modify the access rights (for instance, in the Unix filesystem only
the owner of a file can change the access rights, but this is often
very limiting). (So maybe the concept of owner should be adapted as
well; not just the person who last edited the file. --
EelcoVisser)
ACLs should be per-page; they should not be global to the Wiki. I.e.,
different parts of the Wiki can have different access controls.
It should be possible to defined recursive ACLs, e.g., if we make /A
readable to user Foo, then user Foo should also be able to read /A/B.
Make it possible to create and edit groups (sets of users that can be
reffered to in ACLs).
It must not be necessary to login to access/edit the Wiki if allowed
by the ACLs (so there should be an "anonymous" user). And login should
be prompted only when trying to access a restricted resource.
It would be interesting to be able to form subwikis for which user management
is done locally in that subwiki. --EelcoVisser
(Maybe:) Account creation should use an e-mail confirmation scheme to
verify that the user supplied a valid e-mail address.
I envision the following milestone releases (subject to change):
Release 1 - user creation
Allow users to be created. User account information should probably
just be stored in the Wiki and edited through the normal Wiki
mechanisms, for instance, through a Wiki page /Users/Foo for a user
named Foo. This makes it unnecessary to create special forms for this
purpose.
Release 2 - basic access control
Allow simple, non-recursive ACLs to be defined per-page. Probably
setting the ACLs for some page /X should happen by editing /X/ACL.
(Note that it may be problematic to let /X be a page and a directory
at the same time, unless we establish some kind of implicit extension
scheme. But we (might) also want to use GW to edit arbitrary
subversion repositories. --
EelcoVisser)
Use the ACLs to check access to pages.
Release 3 - groups
Allow groups to be created and used in ACLs.
Release 4 - recursive ACLs
Add recursive ACLs.
Release 5 - efficiency?
Perhaps loading and parsing the ACLs for each page access is too slow,
so it may be necessary to add caching.
Difficult issues
It's not quite clear how ACLs and versioning should interact. For
instance, it will be possible to view old revisions of pages. But
should be then use the ACLs in the old revision of the repository, or
the current ACLs? The latter is necessary to withdraw or grant access
to old revisions of pages. On the other hand, it is not clear how
current ACLs should be applied to pages that have been deleted in the
current revision.