Jump to content

Разрешения

Разрешения фронтэнда позволяют администраторам контролировать, какие группы пользователей могут выполнять какие-либо действия (к примеру, возможность просматривать элементы контента внутри ноды, создание новых элементов контента, комментирование элементов контента, и так далее). Ваши ноды могут иметь до 7 различных разрешений, настраиваемых в зависимости от потребностей вашего приложения. Реализация разрешения изменяет поведение нескольких методов ноды, и добавляет несколько новых методов на основе разрешений, которые вы можете вызвать.

Настройка вашей модели

Для того, чтобы использовать фронтэнд разрешения, ваша модель должна расширить интерфейс \IPS\Node\Permissions, например так:

class _ExampleModel extends \IPS\Node\Model implements \IPS\Node\Permissions
{
	//...
}

Далее вам нужно определить три свойства для вашей модели.

public static $permType = 'string';

Уникальный (для вашего приложения) ключ, который представляет данный набор разрешений на сайте, например 'форумы' или 'категории'.

public static $permApp = 'string';

Ключ вашего приложения, позволяющий сайту корректно ассоциировать ваши разрешения с вашим приложением.

public static $permissionMap = array();

Это свойство представляет собой массив, который сопоставляет ключи разрешений, которые вы хотите определить, с индексом разрешений, который должен иметь либо значение 'view' или целое число от 2 до 7. Как отмечено выше, вы должны, по крайней мере, определить ключ со значением 'view'; вам не нужно определять все 7 разрешений, если вы не планируете их использовать. В качестве примера:

$permissionMap = array(
	'view' => 'view',
	'read' => 2,
	'add' => 3,
	'reply' => 4,
	'export' => 5,
	'download' => 6
);

В данном примере мы определяем обязательный ключ view,  а также пять других ключей, которые будут использоваться нашим приложением. Ключи, которые вы определяете здесь, - это средства, с помощью которых вы будете проверять разрешения в других методах, а так же формируют ключи языковых строк, которые предназначены для названия ваших разрешений.

Некоторые ключи требуются, если ваши модели реализуют некоторые другие функции:

  • view (можно просматривать ноду) всегда необходим (определяется как значение 'view').
  • read (можно читать элементы контента) всегда необходим.
  • add (можно добавлять элементы контента) всегда необходим.
  • reply (можно отвечать на элементы контента) обязателен, если ваши элементы контента могут быть прокомментированы.
  • review (можно оставлять отзывы на элементы контента) обязателен, если ваши элементы контента поддерживают отзывы.

Интерфейс матрицы разрешений в админцентре покажет разрешения в порядке, который вы определяете здесь. Имена столбцов определяются строкой языка с ключом perm__{$key}, где $key это ключ из вышеприведённого массива, поэтому вам нужно добавить их в файл lang.php вашего приложения.

Изменённые поведения после реализации \IPS\Node\Permissions

После реализации в вашей модели, следующие три метода (по умолчанию) будут возвращать дочерние ноды, которые текущий авторизованный пользователь имеет разрешения просматривать:

  • hasChildren()
  • childrenCount()
  • children()

Эти методы принимают два необязательных параметра, которые позволяют вам контролировать это поведение. Подпись параметра одинакова для всех трех; В качестве примера здесь показан children().

array children( [ string $permissionCheck='view' [, \IPS\Member $member=NULL ] ] )

$permissionCheck (string, optional, default 'view')
Определяет, какое разрешение проверяется при работе с потомком; должен быть одним из ключей разрешения, которые вы определили ранее. Разрешение просмотра используется, если ни один не указан.

$member (\IPS\Member, optional)
Контролирует какие разрешения пользователя проверяются. По умолчанию, используется авторизованный в настоящее время пользователь, однако, вы можете переназначит это и указать другого пользователя.

В дополнение к вышупомянутым, метод loadAndCheckPerms() теперь будет бросать исключение OutOfRangeException, если нода загружена у авторизованного пользователя, не имеющего разрешения на просмотр..

Дополнительные методы

boolean static canOnAny( string $permission [, \IPS\Member $member ] )

Возвращает true, если пользователь имеет запрашиваемое разрешение на любой ноде, которая использует эту модель.

  • $permission (string, required) Тип разрешения для проверки.
  • $member (\IPS\Member, optional) Если предоставлено, при выполнении проверки используется разрешение данного пользователя. По умолчанию, используется авторизованный в настоящее время пользователь.

boolean can( string $permission [, \IPS\Member $member ] )

Возвращает true, если пользователь имеет запрашиваемое разрешение для объекта ноды.

  • $permission (string, required) Тип разрешения для проверки.
  • $member (\IPS\Member, optional) Если предоставлено, при выполнении проверки используется разрешение данного пользователя. По умолчанию, используется авторизованный в настоящее время пользователь.

array permissions()

Возвращает массив, представляющий строку ноды из таблицы core_permission_index, которая содержит данные о том, какие группы какие имеют разрешения. Массив содержит ключи perm_view и с perm_2 до perm_7, предоставляющие настроенные вами типы разрешений. Каждое из этих значений представляет собой список идентификаторов групп, разделенных запятыми, которые имеют это разрешение. Например:

$permissions = $myNode->permissions();
$groupsWithPermission = explode( ",", $permissions['perm_2'] ); // perm_2 может быть 'read' в нашей ноде

foreach( $groupsWithPermission as $id )
{
	echo "Группа #{$id} имеет разрешение на прочтение элементов в этой ноде";
}

Этот метод в первую очередь полезен при построении запросов на основе групп, имеющих указанное разрешение.




Messenger

    ×
    ×
    • Create New...

    Important Information

    By using our site you agree to our Privacy Policy