Benutzerrollenberechtigungen basierend auf Taxonomien

Ich habe mich gefragt, ob es möglich ist, Benutzerrollen so einzurichten, dass Benutzer in bestimmten Gruppen NUR Beiträge bearbeiten können, denen eine bestimmte Taxonomie zugewiesen wurde, zB:

Properties (Post Type) Taxonomy One Taxonomy Two Taxonomy Three User Roles Group One - Can only edit properties with 'Taxonomy One' assigned. Group Two - Can only edit properties with 'Taxonomy Two' assigned. Group Three - Can only edit properties with 'Taxonomy Three' assigned. 

Ich verwende momentan das Mitglieder-Plugin für das Rollenmanagement und verwende benutzerdefinierte Post-Typen / -Taxonomien.

Von dem, was ich bisher gesehen habe, sieht es nicht so aus, als könnten Sie den Zugriff auf POSTS basierend auf TAXONOMIES beschränken.

AKTUALISIEREN

Ich habe jetzt Berechtigungen für Post-Typen mit dem folgenden Code arbeiten:

 register_post_type( 'properties', array( 'labels' => array( 'name' => __( 'Properties' ), 'singular_name' => __( 'Property' ) ), 'public' => true, 'capability_type' => 'property', 'map_meta_cap' => true, 'capabilities' => array( 'publish_posts' => 'publish_properties', // This allows a user to publish a property. 'edit_posts' => 'edit_properties', // Allows editing of the user's own properties but does not grant publishing permission. 'edit_others_posts' => 'edit_others_properties', // Allows the user to edit everyone else's properties but not publish. 'delete_posts' => 'delete_properties', // Grants the ability to delete properties written by that user but not others' properties. 'delete_others_posts' => 'delete_others_properties', // Capability to edit properties written by other users. 'read_private_posts' => 'read_private_properties', // Allows users to read private properties. 'edit_post' => 'edit_property', // Meta capability assigned by WordPress. Do not give to any role. 'delete_post' => 'delete_property', // Meta capability assigned by WordPress. Do not give to any role. 'read_post' => 'read_property', // Meta capability assigned by WordPress. Do not give to any role. ) ) ); 

Ein ‘Properties’-Bereich ist nun bei der Bearbeitung von Rollen im’ Members’-Plugin erschienen, mit dem ich den Zugriff einschränken / erlauben kann. Ich muss nur herausfinden, ob dies jetzt für jede Taxonomie machbar ist 🙂

Solutions Collecting From Web of "Benutzerrollenberechtigungen basierend auf Taxonomien"

Ich habe diesen Plugin-Entwickler Blog ausgegraben und das ist, was er als Einblick bietet.

Meta-Fähigkeiten sind functionen, die einem Benutzer pro Post gewährt werden. Die drei, mit denen wir es hier zu tun haben, sind:

edit_post delete_post read_post

Bei normalen Blog-Posts “ordnet” WordPress diese den spezifischen functionen zu, die den Benutzerrollen gewährt werden. Einem Benutzer kann beispielsweise die function “edit_post” für Post 100 zugewiesen werden, wenn er der Postautor ist oder über die function “edit_others_posts” verfügt.

Bei benutzerdefinierten Post-Typen erfolgt diese Zuordnung nicht automatisch, wenn Sie benutzerdefinierte functionen einrichten. Wir müssen eine eigene Lösung finden.

In diesem Tutorial …

http://justintadlock.com/archives/2010/07/10/meta-capabilities-for-custom-post-types

* Ich kann noch nichts sagen, also habe ich als Antwort gepostet.

Sie können möglicherweise den Filter user_has_cap verwenden, der beim user_has_cap nach einer bestimmten Fähigkeit verwendet wird (in /wp-includes/class-wp-user.php in has_cap ):

  /** * Dynamically filter a user's capabilities. * * @since 2.0.0 * @since 3.7.0 Added the user object. * * @param array $allcaps An array of all the user's capabilities. * @param array $caps Actual capabilities for meta capability. * @param array $args Optional parameters passed to has_cap(), typically object ID. * @param WP_User $user The user object. */ $capabilities = apply_filters( 'user_has_cap', $this->allcaps, $caps, $args, $this ); 

Also wäre es so etwas wie:

 add_filter('user_has_cap','check_post_taxonomy',10,4); function check_post_taxonomy($allcaps,$caps,$args,$user) { global $post; if (!isset($post)) {return $allcaps;} $group = get_user_meta($user->ID,'special_edit_group',true); $taxonomy = 'taxonomy_'.$group; // maybe set to a, b or c? $terms = get_the_terms($post->ID,$taxonomy); // if there are no terms, remove the user capability(s) for this check // you may have to experiment to remove all the ones you want to if (!$terms) { unset($allcaps['edit_properties']); } return $allcaps; } 

Ich habe es so gemacht, weil ich erkannte, dass die Logik der Frage nicht ganz richtig ist. Wenn einem Posttyp die Taxonomie A, B und C zugewiesen ist, können alle drei Rollengruppen auch dann, wenn Sie diese functionsfilter für die Rollengruppen wie angegeben festlegen, alles in diesem Posttyp bearbeiten. Mit anderen Worten, es gibt keinen Fall, in dem die Taxonomie A, B oder C “nicht” tatsächlich zugewiesen ist.

Stattdessen denke ich, dass du wirklich meinst “überprüfe, ob diesem bestimmten Beitrag in der Taxonomie A irgendwelche Bedingungen zugewiesen sind” … und wenn ja, mit der Gruppe A, um sie zu bearbeiten, und so weiter. (Anmerkung: Ich habe keine Ahnung, ob der obige Code tatsächlich für diesen Fall funktioniert, es könnte etwas mehr Arbeit erfordern. Zum Beispiel sucht er derzeit nach einem Benutzer-Metaschlüssel für die Gruppe und nicht nach einer tatsächlichen Rolle / Gruppe.)