Consenti ai membri di avere accesso solo al tipo di post personalizzato. Autorizzazione a modificare solo i propri post


29

OK, sto cercando il modo migliore per attaccare questo.

Sono molto a mio agio con PHP e realizzo tipi di post personalizzati con meta campi personalizzati in WordPress.

Ecco cosa sto guardando:

  1. L'utente si registra e viene impostato sull'abbonato per impostazione predefinita.
  2. L'utente richiede all'amministratore di disporre dell'autorizzazione per il tipo di post personalizzato.
  3. L'amministratore assegna l'utente a un altro nome di autorizzazione come "Proprietario del negozio".
  4. L'utente può ora vedere il tipo di post personalizzato e può inserire una voce per questo tipo di post.
  5. L'utente può solo vedere e modificare il proprio post.

Ho bisogno di aiuto per quanto segue:

  1. Come creare un nuovo "Ruolo" chiamato "Proprietario del negozio",
  2. Come fornire l'autorizzazione corretta a tale ruolo per vedere e avere accesso solo al tipo di post personalizzato.
  3. Consenti solo all'utente di visualizzare e modificare i propri post in questo tipo di post personalizzato.

Idealmente, preferirei che tutto ciò fosse stato fatto dal wp-admin, ma suppongo che potrei aver bisogno di costruire un front-end per ottenere il controllo finito che sto cercando.

Ogni input è molto apprezzato.

Cordiali saluti

Risposte:


21

Usa il plugin " Membri " di Justin Tadlock . Ti dà la possibilità di creare nuovi ruoli e modificare ruoli esistenti, nonché aggiungere funzionalità personalizzate. Tutto quel lavoro che dovresti fare può essere ridotto a pochi clic.

So che nel tuo commento sulla risposta di ZaMoose hai detto che stai "cercando di scrivere la funzionalità da solo, così ho il pieno controllo su tutto". Manca l'intero punto del software open source. Justin Tadlock ha rilasciato il suo plugin in modo da poterlo usare esattamente in modo da avere il controllo completo su tutto.

Se davvero vuoi davvero reinventare la ruota, potenzialmente sprecando centinaia di ore del tuo tempo non posso fermarti, ma potresti almeno salvarti il ​​problema e usare il plugin di Tadlock per imparare come fare quello che vuoi.

Una volta che hai un plugin che fa quello che vuoi, dovrai cambiare il 'map_meta_cap'flag truee il 'capability_type'flag nella tua funzione di registrazione del tipo di post in modo che dica qualcosa di diverso da 'post', 'page' o qualsiasi altro 'riservato' genere. Poi, duplicare tutte le funzionalità legate ai post (ad esempio edit_posts, edit_others_posts, publish_posts, etc.), utilizzando il tipo di capacità, invece di messaggi. Assicurati di assegnare tutte queste autorizzazioni agli amministratori (non sarai in grado di vedere il tipo di post fino a quando non lo fai), quindi crea il tuo ruolo, imitando le capacità del ruolo 'contributore' per il tuo tipo di post.

Ad esempio, dire il tipo di funzionalità è stato foobars, si vorrebbe dare 'proprietari di negozi' i edit_foobars, delete_foobarse readle capacità. In questo modo possono creare le proprie bozze foobar ed eliminare quelle bozze, ma poiché non hanno publish_foobarscapacità, devono sottoporle per l'approvazione. Poiché non hanno edit_published_foobars, tutte le modifiche a un foobar approvato devono essere approvate.


OK, sto usando il plugin Members ora per avere un'idea di come funzionano le autorizzazioni dei membri. Ho impostato 'map_meta_cap' => truee 'capability_type' => 'shopowner'sul mio tipo di post personalizzato. Ho creato un nuovo ruolo chiamato ShopOwnere gli ho dato le capacità di read, edit_shopowner, delete_shopowner. Imposta un utente per il ruolo di ShopOwner e accedi con quell'utente. Quell'utente non può vedere il tipo di post personalizzato. Ho perso qualcosa?
Brady,

2
cambia quelli in edit_shopownerse delete_shopowners. edit_shopownere delete_shopownersono meta capacità che non vengono mai effettivamente confrontate. Vengono controllati quando qualcuno tenta di modificare o eliminare un elemento specifico e finiscono per controllare cose come "Può questo utente eliminare questi tipi di elementi? Possono eliminare solo i propri o anche altri? Possono eliminare gli elementi pubblicati?" ecc.
John P Bloch,

Non ho avuto alcun senso di ciò ... ma ho ottenuto la funzionalità che sto cercando impostando le funzionalità nel mio tipo di post personalizzato e creando quelle funzionalità nel plug-in dei membri. Ti ho assegnato le risposte poiché il tuo post è stato il più utile per me per mettere insieme una soluzione. Grazie
Brady,

19

Il tipo di post registro ha un parametro chiamato "capacità", quindi puoi avere ad esempio

'capability' => 'organize_shop',

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

Per creare un nuovo utente / ruolo / funzionalità è possibile utilizzare add_role, add_cap, per un semplice esempio per iniziare:

// 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' );

hmm ... sono un po 'confuso qual è la differenza tra 2 e 3 righe? : S Non aggiunge la stessa funzionalità al ruolo di "Proprietario del negozio"?
dashaluna,

Sì, sono uguali ma mostrano modi diversi per farlo, il primo include il ruolo come primo parametro (Proprietario del negozio), il secondo solo il limite poiché utilizza $ role.
Wyck,

3
Dovresti tradurre una capacità / autorizzazione? quello è __('');
Svetoslav Marinov,

@SvetoslavMarinov Ho modificato la risposta per rimuovere la traduzione.
MikeSchinkel,

@dashaluna Ho modificato la risposta per chiarirla.
MikeSchinkel,

1

Hai considerato di guardare Gravity Forms o TDO Mini Forms per gestire l'invio effettivo dei contenuti? Ognuno di essi ha funzionalità che ti porteranno bene lungo la strada verso la gestione sicura dei contenuti inviati dagli utenti.


Grazie per la risposta, ma questi non sono quello che sto cercando. Principalmente perché si tratta di plugin. Sto cercando di scrivere la funzionalità da solo, quindi ho il pieno controllo su tutto.
Brady,

0

Un modo più semplice ed efficace per ottenere questo risultato installando un plug-in chiamato "Advance Access Manager", non dovrai scrivere le funzionalità ma avere comunque un discreto livello di controllo su utenti, ruoli e cosa possono fare. La maggior parte delle cose che vuoi possono essere raggiunte da questo plugin.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.