9d20313403ade5073e7311f9e98d902ad5d0a0fd
[ikiwiki.git] / doc / todo / ACL.mdwn
1 How about adding ACL? So that you can control which users are allowed
2 to read, write certain pages. The moinmoin wiki has that, and it is
3 something, that I think is very valuable.
4
5 > ikiwiki currently has only the most rudimentary access controls: pages
6 > can be locked, or unlocked and only the admin can edit locked pages. That
7 > could certianly be expanded on, although it's not an area that I have an
8 > overwhelming desire to work on myself right now. Patches appreciated and
9 > I'll be happy to point you in the right directions.. --[[Joey]]
10
11 >> I'm really curious how you'd suggest implementing ACLs on reading a page.
12 >> It seems to me the only way you could do it is .htaccess DenyAll or something,
13 >> and then route all page views through ikiwiki.cgi. Am I missing something?
14 >> --[[Ethan]]
15
16 >>> Or you could just use apache or whatever and set up the access controls
17 >>> there. Of course, that wouldn't integrate very well with the wiki,
18 >>> unless perhaps you decided to use http basic authentication and the
19 >>> httpauth plugin for ikiwiki that integrates with that.. --[[Joey]]
20
21 >>>> Which would rule out openid, or other fun forms of auth. And routing all access
22 >>>> through the CGI sort of defeats the purpose of ikiwiki. --[[Ethan]]
23
24 Also see [[!debbug 443346]].
25
26 I am considering giving this a try, implementing it as a module.
27 Here is how I see it:
28
29   * a new preprocessor directive allows to define ACL entries providing permissions
30     for a given (user, page, operation), as in:
31
32     <pre>
33     \[[acl user=joe page=*.png allow=upload]]
34     \[[acl user=bob page=/blog/bob/* allow=*]]
35     \[[acl user=* page=/blog/bob/* deny=*]]
36     \[[acl user=http://jeremie.koenig.myopenid.com/ page=/todo/* deny=create
37            reason="spends his time writing todo items instead of source code"]]
38     </pre>
39
40     Each would expand to a description of the resulting rule.
41
42   * a configurable page of the wiki would be used as an ACL list.
43     Possibly could refer to other ACL pages, as in:
44
45     <pre>
46     \[[acl user=* page=/subsite/* acl=/subsite/acl.mdwn]]
47     </pre>