Izinkan anggota memiliki akses ke jenis posting khusus saja. Izin hanya mengedit posting mereka sendiri

29

OK saya sedang mencari cara terbaik untuk menyerang ini.

Saya sangat nyaman dengan PHP dan membuat jenis posting khusus dengan bidang meta khusus di WordPress.

Inilah yang ingin saya lakukan:

  1. Register pengguna dan diatur pada pelanggan secara default.
  2. Permintaan pengguna dari admin untuk memiliki izin ke jenis posting khusus.
  3. Admin menetapkan pengguna ke nama izin lain seperti "Pemilik Toko".
  4. Pengguna sekarang dapat melihat jenis posting khusus dan dapat membuat entri ke jenis posting ini.
  5. Pengguna hanya dapat melihat dan mengedit posting mereka sendiri.

Saya butuh bantuan untuk hal berikut:

  1. Cara membuat "Peran" baru yang disebut "Pemilik Toko",
  2. Cara memberi izin yang benar ke peran tersebut hanya melihat dan memiliki akses ke jenis pos kustom.
  3. Hanya izinkan pengguna untuk melihat dan mengedit kiriman mereka sendiri ke jenis kiriman khusus ini.

Idealnya saya lebih suka ini semua dilakukan dari wp-admin tapi saya kira saya mungkin perlu membangun ujung depan untuk ini untuk mendapatkan kontrol yang terbatas yang saya kejar.

Masukan apa pun sangat dihargai.

Salam Hormat

Brady
sumber

Jawaban:

21

Gunakan plugin Justin Tadlock " Anggota ". Ini memberi Anda kemampuan untuk membuat peran baru dan mengedit peran yang ada, serta menambahkan kemampuan khusus. Semua pekerjaan yang harus Anda lakukan dapat diturunkan menjadi beberapa klik.

Saya tahu Anda mengatakan dalam komentar Anda pada jawaban ZaMoose bahwa Anda 'ingin menulis sendiri fungsionalitasnya sehingga saya memiliki kendali penuh atas semuanya.' Itu kehilangan inti dari perangkat lunak open source. Justin Tadlock merilis plugin-nya sehingga Anda dapat menggunakannya dengan tepat sehingga Anda AKAN memiliki kendali penuh atas semuanya.

Jika Anda benar- benar ingin menemukan kembali roda, berpotensi menghabiskan ratusan jam dari waktu Anda sendiri, saya tidak dapat menghentikan Anda, tetapi Anda setidaknya bisa menyelamatkan diri dari masalah dan menggunakan plugin Tadlock untuk belajar bagaimana melakukan apa yang Anda inginkan.

Setelah Anda memiliki plugin yang melakukan apa yang Anda inginkan, Anda harus mengubah 'map_meta_cap'tanda truedan 'capability_type'tanda pada fungsi registrasi jenis pos Anda sehingga ia mengatakan sesuatu selain 'posting', 'halaman', atau 'cadangan' lainnya mengetik. Kemudian, menduplikasi semua kemampuan yang berhubungan dengan posting (misalnya edit_posts, edit_others_posts, publish_posts, dll), menggunakan jenis kemampuan Anda, bukan tulisan. Pastikan untuk memberikan semua izin ini kepada administrator (Anda tidak akan dapat melihat jenis posting sampai Anda melakukan ini), kemudian buat peran Anda, meniru kemampuan peran 'kontributor' untuk jenis posting Anda.

Misalnya, jenis kemampuan Anda adalah foobars, Anda akan ingin memberikan 'pemilik toko' yang edit_foobars, delete_foobars, dan readkemampuan. Dengan begitu mereka dapat membuat draft foobars mereka sendiri, dan menghapus draf tersebut, tetapi karena mereka tidak memiliki publish_foobarskemampuan, mereka harus mengirimkannya untuk persetujuan. Karena mereka tidak punya edit_published_foobars, semua modifikasi untuk foobar yang disetujui harus disetujui.

John P Bloch
sumber
OK saya menggunakan plugin Anggota sekarang untuk mendapatkan intisari tentang cara kerja izin anggota. Saya telah menetapkan 'map_meta_cap' => truedan 'capability_type' => 'shopowner'pada jenis posting khusus saya. Saya telah membuat peran baru yang dipanggil ShopOwnerdan memberinya kemampuan baca, edit_shopowner, delete_shopowner. Tetapkan pengguna ke peran ShopOwner dan masuk dengan pengguna itu. Pengguna itu tidak dapat melihat jenis posting khusus. Apakah saya melewatkan sesuatu?
Brady
2
ubah itu menjadi edit_shopownersdan delete_shopowners. edit_shopownerdan delete_shopownerkemampuan meta yang tidak pernah benar-benar diperiksa. Mereka diperiksa ketika seseorang mencoba mengedit atau menghapus item tertentu, dan pada akhirnya memeriksa hal-hal seperti "Bisakah pengguna ini menghapus item jenis ini? Bisakah mereka juga menghapus sendiri atau orang lain? Bisakah mereka menghapus item yang dipublikasikan?" dll.
John P Bloch
Saya tidak bisa memahaminya ... tapi saya mendapatkan fungsionalitas yang saya kejar dengan mengatur kemampuan dalam jenis posting kustom saya dan menciptakan kemampuan itu dalam plugin anggota. Saya telah memberi Anda jawaban karena pos Anda adalah yang paling berguna bagi saya untuk menyatukan solusi. Terima kasih
Brady
19

Jenis posting register memiliki parameter yang disebut "kemampuan" sehingga Anda dapat memiliki misalnya

'capability' => 'organize_shop',

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

Untuk membuat pengguna / peran / kemampuan baru Anda dapat menggunakan add_role, add_cap, sebagai contoh sederhana untuk memulai:

// 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' );
Wyck
sumber
hmm ... Saya agak bingung apa perbedaan antara 2 dan 3 baris? : S Bukankah itu menambah kemampuan yang sama ke 'Shop Owner'role?
dashaluna
Ya mereka adalah sama tetapi mereka menunjukkan cara berbeda untuk melakukannya, yang pertama menyertakan peran sebagai parameter pertama (Pemilik Toko), yang kedua hanya tutup karena menggunakan $ peran.
Wyck
3
Apakah Anda seharusnya menerjemahkan kapabilitas / izin? itu __ ('');
Svetoslav Marinov
@SvetoslavMarinov Saya mengedit jawaban untuk menghapus terjemahan.
MikeSchinkel
@dashaluna Saya mengedit jawaban untuk memperjelasnya.
MikeSchinkel
1

Sudahkah Anda mempertimbangkan untuk melihat Gravity Forms atau TDO Mini Forms untuk menangani pengiriman konten yang sebenarnya? Masing-masing memiliki fungsi yang akan membantu Anda menangani konten yang dikirimkan pengguna secara wajar.

ZaMoose
sumber
Terima kasih telah menjawab tetapi ini bukan yang saya cari. Terutama karena ini adalah plugin. Saya mencari untuk menulis fungsionalitas sendiri sehingga saya memiliki kontrol penuh atas segalanya.
Brady
0

Cara yang lebih mudah dan efisien bagaimana ini dapat dicapai dengan menginstal plugin yang disebut "Advance Access Manager", Anda tidak harus menulis fungsionalitas tetapi masih memiliki tingkat kontrol yang layak pada pengguna, peran dan apa yang dapat mereka lakukan. Sebagian besar hal yang Anda inginkan dapat dicapai dengan plugin ini.

konyol
sumber