Здравствуйте!
После обновления на версию 16.26.12 столкнулись с проблемой, что пользователь с правами администратора не может редактировать публикацию в фронтенд. Кнопка редактирования есть, после ее нажатия перекидывает в редактирование поста, однако при нажатии Опубликовать выходит сообщение "Вы не можете редактировать эту публикацию".
В настройках плагина в пункте "Фронтенд редактирование" стоит галочка для Администраторы.
Сравнил новый pluginswp-recalladd-onpublicpostfunctions-ajax.php и старый и оказалось, что в строке 168 появился код:
if(!current_user_can('author')){ wp_send_json( [ 'error' => __( 'Вы не можете редактировать эту публикацию', 'wp-recall' ) ] ); }
То есть, правильно ли я понял, что теперь только автор поста может его редактировать?
Удалить эту часть или где-то появилась настройка, которая это отключает?
Добавил роли Администратор дополнительную роль Автор и ошибка ушла.
Но как-то все-таки не логично получается, у роли Администратор же полные права и должно все работать без нагромождения дополнительных ролей. Поидее в этом куске кода тогда нужно добавить проверку на Администратора, но она то идет чуть ниже:
if($data_post_id){ if(!apply_filters('rcl_is_can_preview_post', false, $data_post_id)){ wp_send_json( [ 'error' => __( 'Вы не можете редактировать эту публикацию', 'wp-recall' ) ] ); } }
В этой части, как я понял, как раз и идет проверка на Администратора и автора поста. Зачем тогда еще одна проверка на роль Автора? Как-то избыточно получается
насчет избыточности согласен, но это вопрос к периодическим проверкам со стороны безопасников в репозитории и если они сказали надо добавить, то надо добавить
изначально этой проверки не было и может добавили неудачно, я ведь уже несколько лет правки не тестирую, поэтому такое может появится
просто удалите, ну или предложите рабочий вариант, поправлю в плагине, мне не жалко
Судя по логике, что кнопку редактирования поста могут видеть Автор, Редактор или Администратор (смотря какие настройки установлены в пункте "Фронтенд редактирование"), то сделал у себя вот так:
if(!current_user_can('author') && !current_user_can('administrator') && !current_user_can('editor')){ wp_send_json( [ 'error' => __( 'Вы не можете редактировать эту публикацию', 'wp-recall' ) ] ); }
Просто получается, что привязка current_user_can('author') идет к конкретной роли, а не к правам и Администратор не обязательно Автор, как и Редактор не обязательно Автор