I hope folk will understand that I don't really want to have to do this,
but following a slight problem I've been asked to look at providing a
mechanism for approval of pages on a wiki that we are running to deliver
social services policy & procedures to staff.
I had set it up so that only logins in the group 'editors' could change
the article text but allowed all logins to edit the talk pages, however
management want me to add a system so that changes to the 'article' page
are approved before they are visible to everyone. This goes against the
ethos of the wiki I know, but all our users find the wiki very easy to
use to find things in and appreciate the ability to add to the talk pages.
Accepting that I'm going to have to do this, or move the whole lot into
something else and loose the advantages of the wiki for users, I would
appreciate comments on the following approach.
I would have two special groups of users, 'editors' and 'approvers'
Mediawiki already has multiple versions of pages in the revision table,
I am proposing to add a new field to the pages table pages.page_auth and
would populate this with the revision.rev_id of the last authorised
revision of the page, similar to pages.page_latest having the
revision.rev_id of the latest version.
If a person browsing the wiki is not in either the editors or approvers
groups then the page would be rendered using the rev_id in the new
pages.page_auth rather than the one in pages.page_latest. This would
allow users to see the latest authorised version but allow editors to
continue developing the pages.
I would also add two further fields to the pages table pages.ready_auth
and pages.previous_auth, as well as a new field in revision
revision.authed_by, this would allow me to:-
1. add a tab on the screen (like the watch / unwatch) visible to
'editors' that would allow them to set/unset the binary flag
pages.ready_auth to show a page is ready to be authorised, generating a
list of approvals waiting for the appovers
2. add a tab on the screen (like the watch / unwatch) visible to
approvers that would allow them to approve the page, when they do this I
would get the value currently in the pages.page_auth copied to
pages.previous_auth so we can roll back to the previously authorised
version if needed, copy the current pages.page_latest to pages.page_auth
so that normal user would now see the newly approved revision. I can
also record in the revision.authed_by who authorised the the page to go
live.
3. If a page is has been authorised but needs to rolled back we now have
the previous revision in pages.previous_auth so we can roll back.
I know this is not what we all want wiki's for but rather than loose
what we have have I missed any really salient points in what I'm trying
to do.
Ta
John