Extension:SimpleSecurity/tr

SimpleSecurity uzantısı, makalenin görüntülenebilirliğinin kısıtlanmasına izin vermek için yerel MediaWiki korumasını genişletir.

MediaWiki'de (yukarıda gösterilen korkunç görünümlü uyarı kutusuna neden olan) uygun bir güvenlik çözümünün uygulanmasındaki genel sorun, makalelerde gerçekleştirilebilecek eylemlerin çoğunun kolayca kısıtlanabilmesine rağmen, okuma yeteneğinin içerik, başlık başına kolayca kısıtlanamaz. Okumanın sınırlandırılmasının zor olmasının nedeni, sadece bir eylemle değil, birçok farklı eylemin, özel sayfanın ve uzantıların makale içeriğine erişmesi ve onu çeşitli şekillerde görüntülemesidir. Daha da kötüsü, makale erişiminin bu çeşitli yollarının çoğu, Madde sınıfı üzerinden değil, doğrudan veritabanını sorgulayarak yapılır.

Bu sorun ve SimpleSecurity'nin 4. sürümün üstesinden gelmek için kullandığı çözüm hakkında daha fazla ayrıntı için aşağıdaki teknik ayrıntılar bölümüne bakın. Çözüm varsayılan olarak devre dışıdır (aşağıdaki yapılandırma ayarlarına bakın), yine de onsuz işlevseldir, ancak kısıtlı içeriği dışa aktarma veya başka bir sayfaya aktarma gibi görüntülemek için basit araçlar vardır.

1.17.0 önceki bir MediaWiki sürümünü kullanıyorsanız, OrganicDesign uzantıları Subversion deposu adresinden erişilebilen SimpleSecurity 4.x kullanmanız gerekir.

1.12.0 önceki bir MediaWiki sürümünü kullanıyorsanız, bu uzantının daha eski bir sürümünü kullanmanız gerekecek, ancak 4'ten önceki sürümlerin kararsız, güvenilir olmadığını ve sürüm 4 ve üstü ile aynı şekilde. Son 3.x sürümü [ burada] kullanılabilir.

Kurulum
Uzantılar dizininizde bir SimpleSecurity klasörü oluşturun. Bu uzantıyı OrganicDesign sitesinden indirin ve uzantılar dizininize ekleyin. Ardından, aşağıdaki örnekte olduğu gibi LocalSettings.php dosyanıza ekleyin.

Kullanım
SimpleSecurity4, doğal MediaWiki izin ve kısıtlama sisteminin çalışma şeklini genişletir. Eklenen veya genişletilen belirli işlevlerin ve bunların nasıl kullanılacağı aşağıda listelenmiştir.

Sekmeyi korumak için "Okuma" kısıtlaması eklendi
Ana kod tabanı geliştirmesinin bir süre okuma sorununa bir çözümü olmayacak gibi görünüyor, ancak mevcut makale koruma yöntemi zaten eylemleri gruba göre düzenleme, oluşturma ve taşıma kısıtlamasına izin veriyor ve diğerlerinin olasılığına izin veriyor Bu nedenle Simple Security 4'ün uyguladığı yaklaşım, aşağıdaki resimlerde Simple Security yüklü olan ve olmayan koruma sayfasını gösteren okuma adlı mevcut koruma sayfasına yeni bir kısıtlama eklemektir.

Sağdaki resim, ek okuma kısıtlamasının kullanılabilir olduğunu göstermektedir. Ayrıca, kısıtlamaların ayrı ayrı ayarlanmasına izin vermek için kullanılan onay kutusu daha genel olacak şekilde değiştirilir, böylece herhangi bir sayıda ek kısıtlama için uygun olacaktır.

Koruma sekmesine fazladan gruplar eklendi
Her eylem için seçim kutusunda ek gruplar olmasını sağlamak için (yukarıdaki resimdeki "Güvenlik test grubu" gibi), bunları LocalSettings.php dosyanızdaki $wgSecurityExtraGroups dizisine ekleyin, örneğin: Dizin, bir grubun dahili adı olmalıdır (kullanıcı hakları özel sayfasında vb. Görüldüğü gibi) ve değer, koruma formunda gösterilen daha kolay bir addır. Bu dizide yalnızca koruma formuna grup eklemek için belirtilen herhangi bir eylem olmamalıdır.

MediaWiki 1.13.x'te yalnızca ait olduğunuz ek grupları atayabilirsiniz. Ait olmadığınız ekstra gruplar, grup seçim kutularında boşluk olarak görünür. (disk)

Kategoriye ve ad alanına göre kısıtlama
Kategori tabanlı izinler artık verimlilik nedenleriyle adresinden işleniyor ve tek bir düzeyden fazla devralmayacak. Ad alanı izinleri de desteklenir, her ikisi de aşağıdaki gibi bir biçim kullanan $wgPageRestrictions dizisinde tanımlanır: Bu örnek, Category:Our people'daki maddeyi, yalnızca sysop ve yönetim grup üyelerinin "düzenle" yapabilmelerini kısıtlamaktadır. Ve "okuma" yalnızca "Özel" ad alanındaki tüm makaleler için "kullanıcı" tarafından gerçekleştirilebilir.

Note that categories which include a space must use an _ (underscore) in place of a space as in Category:Our_people above. Please also note that English descriptions such as “Category” or “Namespace” must be used no matter which language is being utilised on the wiki and which was used to set it up.

Restrictions set in $wgPageRestrictions can be overridden by those in the article's protect tab.

Note that even if you restrict "read" action for a category this won't prevent to read the list of pages, categories and files belonging to that category!

Security-based conditions
SimpleSecurity adds two parser-functions for rendering content conditionally based on security permissions or group membership. Here's a couple of examples,

This example renders a link to a todo list if the user has permission to edit the main page, otherwise a link to the news is rendered instead.

Here's the same example again, but this time the conditions is whether or not the user belongs to the sysop group. A comma separated list of groups can be used for the group parameter in which case the condition will evaluate to true if the current user belongs to any of the groups in the list.


 * Notes
 * The last parameter is optional and defaults to an empty string if not supplied
 * Extension:TreeAndMenu can be used with these options since it doesn't render nodes with no content

Security information
Articles which exhibit restrictions either from the protect tab or from $wgPageRestrictions can optionally have the information displayed by setting the $wgSecurityRenderInfo global variable to true. A link will be rendered entitled Security information which when clicked will reveal (or hide) the list of restrictions exhibited by the article. The show/hiding link is of the CSS id security-info-toggle, and the list of restrictions is contained in a div of id security-info, so a custom style can easily be applied by adding some CSS rules to your MediaWiki:Common.css article. For example the following rule gives a border and background to the listed rules when they are visible.

Unreadable links
Still has some bugs to iron out

If the  global is set to false (default), then links to local articles which the current user does not have permission to read are rendered as plain text rather than a hyperlink. The image above shows a small fragment of a recent changes list. Notice that the Sandbox article title and its diff and hist show up grey and are not links, their style can be set in CSS by addressing the unreadable class attribute.

Global security settings
Here are the global variables which affect the operation of the extension. These should be set in your LocalSettings file after the include of the SimpleSecurity.php script.

DB Hook: Technical details
To allow restrictions on the reading of article content requires a hook at a very low-level in the programming which is common to all the kinds of operations involved in the retrieving of article content. The MediaWiki code is written to support a number of different database servers each with their own implementation of the SQL language, and it has also been designed to allow a wiki's database to be served from many servers concurrently. To achieve this, a class has been created to abstract the database access functions from the SQL langauge specifics. All database interaction is handled via the methods of the Database class, and specifically, the only way that any legitimate MediaWiki code would obtain any article content is through the fetchRow and fetchObject methods.

So to really solve the per-title read-restriction issue, some of the methods of the Database class would need to be intercepted. There are no official hooks in the methods we need to intercept, so instead hooks are added in a sub-class of the database type specified in called DatabaseSimpleSecurity.

All text content is held in the old_text field of the text table, so the row-reading needs to be intercepted. But the SELECT queries also have to be adjusted to ensure that the old_id field is available along with old_text otherwise it cannot be established whether or not the text is allowed to be viewed (since the id is needed to relate the text fragment with a current article title). The query method of the database class has been overridden to patch the SQL, and fetchObject has been overridden to replace the content of the requested old_text field if it should not be accessible.

Patching SQL statements directly is not an ideal solution as it's inefficient and lacks portability, but we have a number of clients running mediawiki on their intranets who have been in dire need of a reasonable means of restricting their content on a per-title basis, but are also dead-set on sticking with MediaWiki. Unfortunately this is the only solution we've been able to come up with for them, but testing so far is showing positive results and should be no problem for all but the very high traffic sites.

For more information, see the development notes at OrganicDesign:Extension:SimpleSecurity.php.

Bugs

 * $wgPageRestrictions
 * doesn't work for '*' group, for example $wgPageRestrictions['Category:Public']['read'] = '*' fails.
 * neither does '*' work for the area to restrict, e.g. $wgPageRestrictions['*']['read'] = 'employees'
 * The name of the "Main" Namespace is an empty string, so if you want to limit access to all pages in Main you need to specify $wgPageRestrictions['Namespace:']['read'] = 'employees'