В чем разница между ролями и мета-возможностями; Когда использовать фильтр map_meta_cap ()

8

Я очень запутался в следующих вещах:

  1. разница между ролями и мета-возможностями,
  2. разница между мета и примитивными возможностями,
  3. когда использовать map_meta_cap()фильтр.

Было много ситуаций, когда я добавлял существующие или настраиваемые возможности WP к существующим или настраиваемым ролям WP, ожидая, что он будет работать «из коробки», и в большинстве случаев это не так.

Я вижу, что люди упоминают о map_meta_cap()фильтре, но я не могу найти хорошего объяснения, что он на самом деле делает, и когда мне нужно его использовать, и когда возможности будут работать «из коробки».

Я надеюсь, что в этом есть смысл.

Я был бы очень признателен за объяснения или ссылки на ресурсы, которые объясняют это хорошо.

Спасибо даша

dashaluna
источник
Возможный дубликат использования фильтра map_meta_cap?
Джон Блэкборн
Этот пост Джастина Тэдлока был в конечном счете источником информации, из которого я извлек выгоду больше всего.
Джастин Белл,
Был ли мой ответ полезным для вас? Пожалуйста, примите и подтвердите, если это было полезно
Pmpr

Ответы:

3

разница между ролью и мета-возможностями

Это было бы лучше спросить сравнить Roleс Capabilities, а не просто Meta capabilities, а как простой ответ:

A Roleопределяет набор задач, которым пользователю разрешено выполнять роль.

Capabilities назначены на Roles

разница между мета и примитивными возможностями?

Мета возможности

edit_post, read_postИ , delete_postкак говорят, Meta Capabilitiesпотому что они зависят от контекста, например , пост редактируется / чтения / удаления. Это не имеет смысла, если вы говорите, что у какого-то пользователя есть edit_postвозможность, потому что кто-то спросит вас: она / он может редактировать какой пост?

Примитивные возможности

Это такие возможности, edit_postsкоторые не зависят от контекста и присущи пользователю. Если у кого-то есть edit_postsспособности, он / она может редактировать сообщения.

когда использовать фильтр map_meta_cap ()?

Когда вы регистрируете новый тип записи с помощью register_post_type , у вас есть возможность использовать, для capability_typeкоторой говорится, на что похожи возможности? Там вы можете просто сказать post, что означает, что ваши возможности аналогичны возможностям postпост-типа.

Но если вам нужно больше настроек, вы можете сказать bookили array( 'book', 'books' )(то же самое), например, иметь следующие возможности:

capabilities' => array(
  'edit_post'          => 'edit_book', 
  'read_post'          => 'read_book', 
  'delete_post'        => 'delete_book', 
  'edit_posts'         => 'edit_books', 
  'edit_others_posts'  => 'edit_others_books', 
  'publish_posts'      => 'publish_books',       
  'read_private_posts' => 'read_private_books', 
  'create_posts'       => 'edit_books', 
)

При использовании capability_typeв качестве массива, например, массива ('story', 'Stories'), первый элемент будет использоваться для единичных возможностей, а второй элемент массива - для множественных возможностей.

map_meta_cap()Функция вызывается WP_User->has_cap()для преобразования мета способность одного или более примитивных возможностей.

При регистрации post_type есть также map_meta_capпараметр in register_post_type, который делает то же самое.

PMPR
источник
...If somebody has edit_posts capabality, she/he can edit posts...но какие / чьи посты?
Т.Тодуа