Расширение:Lockdown

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:Lockdown and the translation is 96% complete.
Other languages:
English • ‎Türkçe • ‎русский • ‎日本語 • ‎한국어
Справка по расширениям MediaWiki
OOjs UI icon advanced.svg
Lockdown
Статус релиза: стабильный
Реализация Права пользователя
Описание Implements per-namespace group permissions
Автор(ы) Daniel Kinzler (Duesentriebобсуждение)
MediaWiki 1.31+
PHP 5.5+
Лицензия GNU General Public License 2.0 or later
Загрузка
README
  • $wgActionLockdown
  • $wgNamespacePermissionLockdown
  • $wgSpecialPageLockdown
Переведите расширение Lockdown если оно доступно на translatewiki.net
Проверьте использование и версию.
Проблемы Открытые задачи · Сообщить об ошибке

Расширение Lockdown реализует способ ограничения доступа к определённым пространствам имён и служебным страницам для заданного набора групп пользователей. Это обеспечивает более детализированную модель безопасности, чем та, которая предусмотрена настройками по умолчанию $wgGroupPermissions и $wgNamespaceProtection .

Для понимания приведённых ниже инструкций могут быть полезны следующие страницы о модели безопасности, используемой MediaWiki по умолчанию:

Установка

  • Скачайте и распакуйте файл(ы) в папку с названием Lockdown в вашей папке extensions/.
  • Добавьте следующие строки в конец файла LocalSettings.php:
    wfLoadExtension( 'Lockdown' );
    
  • Настройте так, как вам требуется
  • Yes Готово – Перейдите на страницу Special:Version на своей вики, чтобы удостовериться в том, что расширение успешно установлено.
Из-за проблем (см. также эту тему) это расширение, похоже, не работает должным образом с MediaWiki 1.27.x - 1.30.x. Однако эти проблемы были решены для MediaWiki 1.31 и новее!

Пример

Для того, чтобы с помощью Lockdown:

  • запретить доступ к Special:Export авторизованным участникам (зарегистрированным участникам)
  • разрешить редактирование пространства имён проекта только авторизованным участникам (зарегистрированным участникам)

Вы должны сделать следующее:

$wgSpecialPageLockdown['Export'] = [ 'user' ];
$wgNamespacePermissionLockdown[NS_PROJECT]['edit'] = [ 'user' ];

См. объяснение и другие примеры ниже.

Настройка

Обратите внимание, что расширение Lockdown может использоваться только для ограничения доступа, но не для его предоставления. Если доступ запрещён некоторыми встроенными настройками MediaWiki, его нельзя разрешить с помощью расширения Lockdown.

$wgSpecialPageLockdown

$wgSpecialPageLockdown позволяет указать для каждой служебной страницы, какие группы участников имеют к ней доступ. Например, чтобы ограничить использование Special:Export для авторизованных пользователей, используйте это в LocalSettings.php:

$wgSpecialPageLockdown['Export'] = [ 'user' ];

Обратите внимание, что некоторые служебные страницы изначально требуют определенного разрешения. Например, Special:MovePage, который можно использовать для переименования страниц, требует разрешения «move» (по умолчанию предоставляется только зарегистрированным участникам). Это ограничение нельзя отменить с помощью расширения Lockdown.

Некоторые названия служебных страниц не пишутся с заглавной буквы, как они отображаются в вики. Например, Special:RecentChanges пишется как Recentchanges, поэтому для ограничения доступа к этой странице вам необходимо использовать:

$wgSpecialPageLockdown['Recentchanges'] = [ 'user' ];

Полный список названий служебных страниц доступен в массиве «MessagesEn.php" file (<tvar|2>$specialPageAliases»)

$wgActionLockdown

$wgActionLockdown позволяет вам указать для каждого действия, какие группы участников имеют к нему доступ. Например, чтобы ограничить использование страницы истории авторизованными участниками, используйте это в LocalSettings.php:

$wgActionLockdown['history'] = [ 'user' ];

Note that some actions can not be locked down this way. In particular, it will not work for the ajax action.

$wgNamespacePermissionLockdown

$wgNamespacePermissionLockdown lets you restrict which user groups have which permissions on which namespace. For example, to grant only members of the sysop group write access to the project namespace, use this:

$wgNamespacePermissionLockdown[NS_PROJECT]['edit'] = [ 'sysop' ];

Wildcards for either the namespace or the permission (but not both at once) are supported. More specific definitions take precedence:

$wgNamespacePermissionLockdown[NS_PROJECT]['*'] = [ 'sysop' ];
$wgNamespacePermissionLockdown[NS_PROJECT]['read'] = [ '*' ];

$wgNamespacePermissionLockdown['*']['move'] = [ 'autoconfirmed' ];

The first two lines restrict all permissions in the project namespace to members of the sysop group, but still allow reading to anyone. The third line limits page moves in all namespaces to members of the autoconfirmed group.

Note that this way, you cannot grant permissions that have not been allowed by the build-in $wgGroupPermissions setting. The following does not allow regular users to patrol edits in the main namespace:

$wgNamespacePermissionLockdown[NS_MAIN]['patrol'] = [ 'user' ];

Instead, you would have to grant this right in $wgGroupPermissions first, and then restrict it again using $wgNamespacePermissionLockdown:

$wgGroupPermissions['user']['patrol'] = true;

$wgNamespacePermissionLockdown['*']['patrol'] = [ 'sysop' ];
$wgNamespacePermissionLockdown[NS_MAIN]['patrol'] = [ 'user' ];

Note that when restricting read-access to a namespace, the restriction can easily be circumvented if the user has read access to any other namespace: by including a read-protected page as a template, it can be made visible. To avoid this, you would have to forbid the use of pages from that namespace as templates, by adding the namespace's ID to $wgNonincludableNamespaces:

$wgNamespacePermissionLockdown[NS_PROJECT]['read'] = [ 'user' ];
$wgNonincludableNamespaces[] = NS_PROJECT;

You can of course also use Lockdown with custom namespaces defined using $wgExtraNamespaces:

// define custom namespaces
$wgExtraNamespaces[100] = 'Private';
$wgExtraNamespaces[101] = 'Private_talk';

// restrict "read" permission to logged in users
$wgNamespacePermissionLockdown[100]['read'] = [ 'user' ];
$wgNamespacePermissionLockdown[101]['read'] = [ 'user' ];

// prevent inclusion of pages from that namespace
$wgNonincludableNamespaces[] = 100;
$wgNonincludableNamespaces[] = 101;

Note that custom namespaces should always be defined in pairs, the namespace proper (with an even id), and the associated talk namespace (with an odd id).

If you want to use constants to refer to your namespaces, you need to define them:

// define constants for your custom namespaces, for a more readable configuration
define('NS_PRIVATE', 100);
define('NS_PRIVATE_TALK', 101);

// define custom namespaces
$wgExtraNamespaces[NS_PRIVATE] = 'Private';
$wgExtraNamespaces[NS_PRIVATE_TALK] = 'Private_talk';

// restrict "read" permission to logged in users
$wgNamespacePermissionLockdown[NS_PRIVATE]['read'] = [ 'user' ];
$wgNamespacePermissionLockdown[NS_PRIVATE_TALK]['read'] = [ 'user' ];

// prevent inclusion of pages from that namespace
$wgNonincludableNamespaces[] = NS_PRIVATE;
$wgNonincludableNamespaces[] = NS_PRIVATE_TALK;

You could also use array_fill() to restrict multiple namespaces at once, e.g. if you wanted to restrict namespaces 0 to 2009 to editing by sysops only:

$wgNamespacePermissionLockdown = array_fill( 0, 2010, [  'edit' => [ 'sysop'  ] ] );

Managing groups

You can control which user belongs to which groups with the page Special:Userrights. Only existing groups will be proposed, but you can "create" a new group by creating an entry for it in $wgGroupPermissions (even if you don't actually need to set a permission there, but it has to appear on the left hand side of the array). For example:

$wgGroupPermissions['somegroupname']['read'] = true;

For more information, see Help:User rights, Manual:User rights, and Manual:User rights management.

Additional measures

Images and other uploaded files

Images and other uploaded files still can be seen and included on any page. Protections on the Image namespace do not prevent that. See Manual:Image Authorisation for information on how to prevent unauthorized access to images. See also:

Known issues

Lockdown is known to be broken for MW 1.27.x to 1.30.x [1]. Possible side-effects of using it include:

  • Incomplete list of namespaces showing under the Advanced tab of Special:Search and on the special page for ReplaceText
  • Searchbox no longer offering autocompletion for certain namespaces

A workaround may be to list all namespaces under $wgContentNamespaces , but success is not guaranteed. Another temporary solution is to use a version before the breaking commits, as detailed in Topic:Tr4xxpln3fnpz3eu.

See also