Дозволити учаснику мати доступ лише до користувацького типу публікації. Дозвіл редагувати лише власні публікації


29

Гаразд, я шукаю найкращий спосіб атакувати це.

Мені дуже зручно з PHP та створенням користувальницьких типів публікацій зі спеціальними метаполями в WordPress.

Ось що я дивлюся:

  1. Користувач реєструється та встановлюється у абонента за замовчуванням.
  2. Користувач просить адміністратора отримати дозвіл на користувацький тип публікації.
  3. Адміністратор присвоює користувачеві інше ім'я дозволу, наприклад "Власник магазину".
  4. Тепер користувач може бачити спеціальний тип публікації та може вносити запис до цього типу публікації.
  5. Користувач може бачити та редагувати лише свою власну публікацію.

Мені потрібна допомога з наступного:

  1. Як створити нову "Роль" під назвою "Власник магазину",
  2. Як надати правильний дозвіл зазначеній ролі лише бачити та мати доступ до користувацького типу публікації.
  3. Дозволити користувачеві бачити та редагувати власні публікації до цього користувацького типу публікацій.

В ідеалі я вважаю за краще, щоб це все було зроблено з wp-admin, але я здогадуюсь, що мені, можливо, знадобиться побудувати передню частину для цього, щоб отримати кінцевий контроль, за яким я дотримуюся.

Будь-який вклад дуже вдячний.

З повагою

Відповіді:


21

Використовуйте плагін Джастіна Тадлока " Члени ". Це дає можливість створювати нові ролі та редагувати наявні ролі, а також додавати спеціальні можливості. Всю роботу, яку вам доведеться зробити, можна зняти в кілька кліків.

Я знаю, що ви сказали у своєму коментарі до відповіді ZaMoose, що ви "хочете написати функціонал сам, щоб я мав повний контроль над усім". У цьому відсутня вся суть програмного забезпечення з відкритим кодом. Джастін Тадлок випустив свій плагін, щоб ви могли точно ним користуватися, щоб ви мали повний контроль над усім.

Якщо ти справді насправді хочете винаходити велосипед, потенційно витрачати сотні годин свого власного часу , я не можу зупинити вас, але ви могли б по крайней мере , зберегти себе неприємності і плагін використовувати Tadlock, щоб дізнатися , як зробити те , що ви хочете.

Коли у вас є плагін, який виконує все, що вам потрібно, вам потрібно буде змінити 'map_meta_cap'прапор trueі 'capability_type'прапор у функції реєстрації типу вашої пошти, щоб він писав щось інше, ніж "повідомлення", "сторінка" або будь-який інший "зарезервований" тип. Потім дублюємо всі можливості , пов'язані з посади (наприклад edit_posts, edit_others_posts, publish_postsі т.д.), використовуючи тип функціональних можливостей , а не повідомлення. Обов’язково призначте всі ці дозволи адміністраторам (ви не зможете бачити тип публікації, поки ви цього не зробите), а потім створіть свою роль, імітуючи можливості ролі "дописувача" для вашого типу публікації.

Наприклад, скажімо , ваш тип можливість була foobars, ви б хотіли , щоб дати «власників магазинів» на edit_foobars, delete_foobarsі readможливості. Таким чином вони можуть створювати власні чорнові проекти та видаляти ці чернетки, але оскільки вони не мають publish_foobarsможливостей, вони повинні надіслати їх на затвердження. Оскільки вони не мають edit_published_foobars, всі зміни затвердженого foobar повинні бути затверджені.


Гаразд, використовуючи плагін "Members" зараз, щоб визначити, як працюють дозволи користувачів. Я встановив 'map_meta_cap' => trueі 'capability_type' => 'shopowner'на своєму власному типі публікації. Я створив нову роль під назвою ShopOwnerі надав їй можливості read, edit_shopowner, delete_shopowner. Встановіть користувача на роль ShopOwner та увійдіть із цим користувачем. Цей користувач не може бачити спеціальний тип публікації. Я щось пропустив?
Брейді

2
змінити ці на edit_shopownersта delete_shopowners. edit_shopownerі delete_shopownerце мета-можливості, які ніколи фактично не перевіряються. Вони перевіряються, коли хтось намагається відредагувати або видалити певний елемент, і в кінцевому підсумку перевіряють такі речі, як "Чи може цей користувач видалити ці типи предметів? Чи можуть вони видалити лише свої або інші? Чи можуть вони видалити опубліковані елементи?" і т. д.
Джон П Блох

Я не мав цього сенсу ... але я отримав функціонал, за яким я домагаюся, встановивши можливості у своєму користувальницькому типі публікації та створивши ці можливості у плагіні для членів. Я нагородив вас відповідями, оскільки ваша публікація була для мене найбільш корисною для спільного вирішення. Спасибі
Брейді

19

Тип повідомлення в регістрі має параметр під назвою "можливості", тому ви можете мати його, наприклад

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Щоб створити нового користувача / роль / можливість, ви можете використовувати add_role, add_cap, для простого прикладу для початку:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

хм ... я трохи розгублений, в чому різниця між 2 та 3 рядками? : S Чи не додає вона таку саму можливість до "власника магазину"?
дашалуна

Так, вони однакові, але вони показують різні способи зробити це, перший включає роль першого параметра (власник магазину), другий - лише обмеження, оскільки він використовує $ role.
Wyck

3
Чи слід перекладати можливості / дозвіл? це __ ('');
Светослав Маринов

@SvetoslavMarinov Я відредагував відповідь, щоб видалити переклад.
MikeSchinkel

@dashaluna Я відредагував відповідь, щоб уточнити її.
MikeSchinkel

1

Чи розглядали ви, як виглядати Gravity Forms або TDO Mini Forms для обробки фактичного подання вмісту? У кожного з них є функціонал, який дозволить вам добре рухатися до добросовісного поводження з поданим користувачем вмістом.


Дякую за відповідь, але це не те, що я шукаю. Головним чином тому, що це плагіни. Я прагну написати функціонал сам, щоб мати повний контроль над усім.
Брейді

0

Простіший та ефективний спосіб, як цього можна досягти, встановивши плагін під назвою "Advance Access Manager", вам не доведеться писати функціональні можливості, але все одно матимуть пристойний рівень контролю над користувачами, ролями та тим, що вони можуть робити. Більшість бажаних речей можна досягти цим плагіном.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.