WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

user_can() WP 2.0

Проверяет возможности указанного пользователя, совершать указанное действие.

Функция очень похожа на current_user_can(), отличается тем что ей нужно указывать первый параметр — ID/объект пользователя возможность которого нужно проверить.

Вместо названия конкретного права пользователя, можно указать название его роли для проверки. Но такая практика не рекомендуется, потому что в некоторых случаях такая проверка на роль пользователя может работать неправильно!

Это функция-обертка для метода WP_User::has_cap().

Смотрите также: функцию map_meta_cap() и хук map_meta_cap.

Работает на основе: WP_User::has_cap()

Хуков нет.

Возвращает

true или false, в зависимости от того есть ли указанные возможности у пользователя.

Использование

user_can( $user, $capability, $object_id, ... );

Шаблон использования

$user_id = 3;
if( user_can( $user_id, 'manage_options' ) ){
	// код
}
$user(число/объект) (обязательный)
ID или объект пользователя, права которого нужно проверить.
По умолчанию: нет
$capability(строка) (обязательный)
Название возможности или роли. Список возможностей и ролей смотрите здесь.
По умолчанию: нет
$object_id, ...(число) (обязательный)

ID объекта (например поста или коммента) право которого нужно проверить. В этом случае в параметре $capability нужно указывать название мета права, а не примитивного права: например, edit_post, а не edit_posts of a specific object to check against if $cap is a "meta" capability.

О том как работают мета права читайте в описании map_meta_cap(), которая на основе переданного ID объекта и указанного мета права, превращает это мета право в примитивное право, а затем это примитивное право сравнивается со списком прав пользователя (включая список прав его роли).

Примеры

#1. Проверим может ли текущий пользователь удалять посты

Это пример проверки примитивного права.

global $user_ID;
if( ! user_can( $user_ID, 'delete_posts' ) ){
	echo "У вас нет права удалять посты!";
}

#2. Проверим может ли указанный пользователь с ID 141 изменить пост с ID 1

Это пример проверки мета права.

$user = get_userdata( 141 );
$post = get_post( 1 );
if( user_can( $user, 'edit_post', 1 ) ){
	echo 'Вы можете редактировать этот пост';
}

Код user_can: wp-includes/capabilities.php VER 5.0.1

<?php
function user_can( $user, $capability ) {
	if ( ! is_object( $user ) )
		$user = get_userdata( $user );

	if ( ! $user || ! $user->exists() )
		return false;

	$args = array_slice( func_get_args(), 2 );
	$args = array_merge( array( $capability ), $args );

	return call_user_func_array( array( $user, 'has_cap' ), $args );
}

Cвязанные функции

Из метки: Роли и возможности (role capabilities)

Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться