Что такое использование фильтра map_meta_cap?

20

Какая польза от map_meta_capфильтра? Этот фильтр нигде не задокументирован. У меня есть неясное представление о том, что это может быть:

Используется для сопоставления разрешений пользователя с операциями над сообщениями.

Для чего именно это? Если возможно, приведите пример кода для правильного использования.

rsman
источник

Ответы:

25

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

Например, вы хотите знать , должен ли текущий пользователь будет разрешено редактировать текущую запись, в edit_postмета - возможности . Это зависит от некоторых факторов: является ли пользователь автором сообщения? Сообщение уже опубликовано? Помечен ли пост как частный? Примитивные возможности являются edit_posts, edit_published_posts, edit_others_postsи edit_private_postsвы можете назначить их роли пользователя . map_meta_cap()проверяет автора и статус сообщения и возвращает правильный набор примитивных возможностей, которые этот пользователь должен разрешить редактировать сообщение (если сообщение написано кем-то другим и опубликовано, оно вернется array('edit_others_posts', 'edit_published_posts'), поэтому пользователь должен иметь обе возможности для Продолжить).

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

Фильтрmap_meta_cap позволяет расширить функциональность, например, при использовании пользовательских сообщений. Я полагаю, что базовая поддержка предоставляется, если вы зададитеcapabilities аргумент register_post_type, но упомянутая статья Джастина Тэдлока и плагина Prospress предоставляет полные примеры этого. Но вы можете настроить его так, чтобы полностью перевернуть систему возможностей, если хотите.

Ян Фабри
источник
2

Это фильтр функций map_meta_cap(). Из описания эта функция, кажется, выписывает общую возможность ( can_do_stuff ), переданную в более конкретную (если автор сообщения - can_do_this_stuff и can_do_that_stuff_also ), проверяя различные условия, если это необходимо.

К сожалению, это не документировано в Кодексе, и я не могу найти ни одного прямого вызова этой функции в источнике WP 3.0.1.

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

Rarst
источник
Автор этого плагина, кажется, использует его: github.com/Prospress/Prospress/blob/master/pp-posts/…
rsman