Extension:SimpleSecurity/tr

MediaWiki manüel uzantıları
OOjs UI icon advanced.svg
SimpleSecurity
Sürüm durumu: bakımsız
Uygulama Kullanıcı hakları
Açıklama Makalenin görüntülenebilirliğinin kısıtlanmasına izin vermek için yerel MediaWiki korumasını genişletir
Yazar(lar) Aran Dunkley (Nadtalk)
En son sürüm 5.1.0 (2012-01-19)
MediaWiki 1.17.x–1.24.x
Veritabanı değişiklikleri Hayır
Lisans GNU Genel Kamu Lisansı 2.0 veya üstü
İndir
Translatewiki.net adresinde mevcutsa, SimpleSecurity uzantısını çevirin
Kullanım ve sürüm matrisini kontrol edin.

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.

KurulumEdit

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.

include_once("{$IP}/extensions/SimpleSecurity/SimpleSecurity.php");
$wgSecurityUseDBHook = true; # Add this to enable the experimental DB hook for stronger security
require_once("{$IP}/extensions/SimpleSecurity/SimpleSecurity.php");
$wgSecurityUseDBHook = true; # NOTE: this directive MUST be used before the require_once directive if you're using SimpleSecurity 4.x
$wgSecurityRenderInfo = true;
$wgSecurityAllowUnreadableLinks = false;
$wgPageRestrictions['Category:Servers']['read'] = 'sysop';
# Version 5.0.4 requires the following sequence of statements (a different sequence does not work!):
$wgSecurityUseDBHook = true; # NOTE: this directive MUST be used before the require_once directive if you're using SimpleSecurity 4.x, 5.0.4
require_once("{$IP}/extensions/SimpleSecurity/SimpleSecurity.php");
$wgSecurityRenderInfo = true;
$wgSecurityAllowUnreadableLinks = false;
$wgPageRestrictions['Category:Servers']['read'] = 'sysop';

KullanımEdit

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ı eklendiEdit

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.

SimpleSecurity olmadan koruma formu SimpleSecurity ile koruma formu
            

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 eklendiEdit

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:

$wgSecurityExtraGroups = array(
    'foo' => 'Foo group',
    'bar' => 'Bar group'
);

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ıtlamaEdit

Kategori tabanlı izinler artık verimlilik nedenleriyle LocalSettings.php 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:

$wgPageRestrictions['Category:Our_people']['edit'] = array('sysop', 'management');
$wgPageRestrictions['Namespace:Special']['read'] = 'user';

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 conditionsEdit

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

{{#ifusercan:edit|Main page|Check the homepage editing [[todo list]]!|check the [[latest news]]!}}

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.

{{#ifgroup:sysop|Check the homepage editing [[todo list]]!|check the [[latest news]]!}}

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 informationEdit

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.

#security-info-toggle {
    background: transparent url(/wiki/skins/monobook/lock_icon.gif) no-repeat scroll left center;
    padding-left: 16px;
}
#security-info {
    border: 1px solid #ccc;
    background: #eee;
}

Unreadable linksEdit

Still has some bugs to iron out

If the $wgSecurityAllowUnreadableLinks 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 settingsEdit

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.

Variable Default value Meaning
$wgSecurityUseDBHook false Specifies whether or not the voodoo should be used to intercept the database queries. To enable this, it must be set to true before the SimpleSecurity.php inclusion.
$wgSecurityRenderInfo true Renders security information for articles for which restrictions apply
$wgSecurityAllowUnreadableLinks false Whether or not a hyperlink to a page which is not readable by the current user should still render as a link
$wgSecurityMagicIf ifusercan The name for doing permission-based conditional content
$wgSecurityMagicGroup ifgroup The name for doing group-based conditional content
$wgSecurityExtraGroups empty An array of the additional groups which should be available in the protect tab
$wgSecurityGroupsArticle empty Additionally extra groups can be supplied in an article (default namespace assumed is "MediaWiki")
$wgPageRestrictions empty An array of category and namespace based restrictions

DB Hook: Technical detailsEdit

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 Database 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 $wgDBtype 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.

BugsEdit

  • $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'

See AlsoEdit