Intereting Posts
Создание кнопки из данных метаданных автора Проблема фильтра типа mime в WordPress 4.0 Получить категории для определенной должности – Пользовательский тип сообщения Автоматически устанавливать полный размер для всех моих изображений во всех моих сообщениях и на странице? Как отправить сообщение в сложный слайдер Вывод короткого кода в верхней части содержимого Создание пользовательской открытой пользовательской страницы сложный вопрос о отображаемом изображении Может ли параметр настройки настроек настроить другие настройки? WordPress Permlinks 404 не найден Найдите метод, который AJAX GET вызывает menu_order не работает со слизнями, которые начинаются с admin.php Невозможно сохранить несколько изображений в wordpress Уведомление PHP – пользовательская функция Как кэшировать сообщения на основе $ _GET? Имя опции слишком длинное? Варианты / переходные процессы

Возможности Vs User Meta

В чем преимущество использования capabilities вместо usermeta ?

Например, cap access_feature_x vs meta access_feature_x . Я могу использовать current_user_can() vs get_user_meta() для различных проверок.

Итак, какое улучшение предоставляет возможности?

редактировать

Вопрос кажется слишком широким для конкретного ответа. Итак, я приведу примерный контекст. Пожалуйста, сохраняйте свои исходные ответы, так как они также полезны и добавляют дополнительную информацию ниже вашего текущего ответа.

К примеру ,

  1. Функция на моем сайте участника feature_x .
  2. Функция отключена для всех пользователей, кроме администраторов и редакторов.
  3. После того, как пользователь зарегистрируется для этой функции, он активируется, и пользователю открывается новая часть пользовательского интерфейса.

Для приведенного выше примера. Я могу пойти и с usermeta, и с возможностями. Как вы подходите к данной проблеме? В настоящее время я занимаюсь мета

Solutions Collecting From Web of "Возможности Vs User Meta"

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

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

  • Возможности предназначены для проверки того, может ли пользователь что- то сделать или нет. user_can и current_user_can помогут вам проверить права пользователя. Вы также можете реализовать это с помощью мета-метаданных, но не имеет смысла, если у вас есть эта функция в ядре.

  • Нет никаких сомнений в том, что возможности могут использоваться для группировки пользователей со схожими характеристиками, даже если группы не связаны с разрешениями. В этом случае возможности для пользователей несколько схожи с тем, что означает таксономия для должностей. Функция user_can может использоваться, чтобы проверить, есть ли у пользователя возможность или нет (аналогично has_term ), но нет основной функции, которая делает то же самое для meta. Однако извлечение коллекции пользователей по возможностям, вероятно, дороже, чем загрузка пользователей простым мета-запросом (это предположение, не основанное на реальных данных профилирования производительности).

  • Чтобы фильтровать « на лету» (без изменения db), все возможности, назначенные пользователю, довольно легкие (особенно если колпачок проверен с помощью user_can / current_user_can и нет причин, почему нет), в то время как делать то же самое для мета намного сложнее.

  • Meta может обрабатывать вложенные данные (например, массивы и даже разные (наборы) значений для одного и того же мета-ключа). Это невозможно с возможностями.

  • Возможности могут быть сгруппированы по ролям. И роли также имеют пользовательский интерфейс в бэкэнд, который позволяет назначать «набор» возможностей, назначая роль. Для мета не существует такой выгоды.

  • Возможности – это независимые сущности от пользователей, и они выживают пользователей: если вы удаляете всех пользователей, у которых есть возможность, они остаются там. То же самое не относится к мета: все мета идут с пользователем, если он удален.

редактировать

После редактирования на OP я бы сказал, что возможности намного лучше: вы реализуете с мета-то, что ядро ​​уже делает с возможностями, и именно то, что должно быть предназначено.

В качестве примера add_menu_page функцию add_menu_page , у нее есть аргумент $capability который позволяет показывать страницу меню только тем пользователям, которые имеют такую ​​возможность.

Это всего лишь пример, существуют разные функции, которые принимают возможности в качестве аргумента. Более того, как сказано в первом пункте перед редактированием, нет смысла реализовывать с нуля функцию, которая уже имеет ядро.

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

Используя мета-поля вместо возможностей, вы также теряете возможность группировать пользователей в роли, которые могут быть или не быть важными.

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

Что касается конкретного примера в части редактирования. Это хорошо вписывается в управление доступом, и вам даже нужно это для реальных ролей, поэтому возможности – это путь.

Пользовательские возможности позволят вам установить параметры доступа к сайту для определенного типа учетной записи пользователя / пользователя, в то время как метаданные позволяют вам устанавливать параметры отдельно для каждой публикации / страницы или всего, что поддерживает Meta в WordPress. Другими словами, возможности являются частью ACL (уровень контроля доступа), тогда как Meta лучше всего использовать при представлении данных.

Возможности пользователя лучше всего, если вы пишете приложение, которое использует определенный контроль доступа в глобальной области применения вашего приложения, тогда как пользовательская мета лучше, если вы хотите применить ограничение на сообщение / страницу. Обратите внимание: если вы контролируете ACL с помощью Capabilities, вам просто нужно создать учетную запись пользователя определенного типа пользователя, чтобы применить определенные ограничения; однако вам нужно будет убедиться, что вы (вручную) добавляете определенное значение Meta на каждую Post, страницу, к которой вы хотите применить ACL.

Использование возможностей и Meta очень специфично для приложений, и я боюсь, если я смогу обобщить лучшие сценарии для вас, чтобы определить, какой из них лучше всего.