= IntraACL extension for MediaWiki =
IntraACL extension for MediaWiki is the page rights extension loosely based on HaloACL, correcting its endless bugs and inconveniences.
== REQUIREMENTS ==
== INSTALLATION ==
The method of IntraACL installation via the super-duper-installer of Halo MediaWiki bundle is now removed as very non-standard.
== PERMISSION MODEL ==
IntraACL is for page-level permissions.
Permissions are defined in ACLs. ACLs are wikipages in ACL namespace and may be defined for:
Each of these is considered a "level of ACL specificity". Coexisting ACLs of different "levels" are combined according to $haclgCombineMode which may be EXTEND, OVERRIDE or SHRINK:
If there are ACLs for multiple categories and/or parent categories of the same page, they always "extend" each other.
There are permissions for CREATE, READ, EDIT, DELETE, MOVE, MANAGE and PROTECT_PAGES actions. First 5 are obvious, MANAGE and PROTECT_PAGES are for ACLs (see below).
Also there is $haclgOpenWikiAccess setting which means "allow everything that's not denied explicitly" when it's true (OpenWikiAccess) and "deny everything that's not allowed explicitly" when it's false (ClosedWikiAccess).
Permissions for ACL pages:
=== WARNING 1 ===
This is not an ideal scheme due to the fact that categories are set inside page content. This means everyone who can edit a page may modify its permissions - at least by removing categories, or by adding his own category granting additional permissions to him. This is important especially in conjunction with PROTECT_PAGES permission. Consider the following example:
You should consider this when defining permissions for your wikis.
=== WARNING 2 ===
ANY installed extension MAY lead to SECURITY BREACHES.
This is because of MediaWiki by-design openness and extensibility and the need for direct database queries from extension code.
You should check that all your extensions perform access right checks using $title->userCan('read') before displaying $title content.
When showing page listings from the DB, you can use a stored procedure for permission checks using the FilterPageQuery hook to modify your query (for details see FilterPageQuery in includes/Evaluator.php)
== SemanticMediaWiki ==
The original feature of HaloACL (protection of semantic properties via encrypting them) is also removed. IntraACL is thus incompatible with the original SemanticMediaWiki.
You may however try the version from Mediawiki4Intranet: https://github.com/mediawiki4intranet/SemanticMediaWiki - it is slightly outdated (only 1.8), but it contains a patch which enables read permission checks in every place that displays information.
If you have experience in PHP you may also try to rebase that patch for newer SMW versions and send it to us :)
== MediaWiki 4 Intranet ==
You can also use Mediawiki4Intranet bundle. It already includes IntraACL and many other useful extensions which are patched to perform access right checks.