web-dev-qa-db-ja.com

分類法に基づくユーザー役割の許可

特定のグループに属するユーザーは、特定の分類法が割り当てられている投稿のみを編集できるという意味で、ユーザーロールを設定することは可能かどうかと思いました。

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.

現時点では、 Membersプラグイン をロール管理に使用しています。また、カスタム投稿タイプ/分類法を使用しています。

今まで見てきたことから、TAXONOMIESに基づいてPOSTSへのアクセスを制限できるようには見えません。

UPDATE

私は今、次のコードを使用して投稿タイプに対して機能する権限を持っています。

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.
        )
    )
);

'Members'プラグインでロールを編集するときに 'Properties'セクションが表示されるようになり、アクセスを制限/許可できます。これが各分類法に対して現在実行可能かどうかを判断する必要があります:)

1
Lighty_46

特定の機能をチェックするときに使用されるフィルタuser_has_capを使用できるかもしれません(/wp-includes/class-wp-user.phphas_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 );

だからそれは何かのようになります:

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;
}

質問の論理がまったく正しくないことに気付いたので、このようにしました。投稿タイプに分類A、B、Cが割り当てられている場合は、役割グループに対してこれらの機能フィルタを設定したとしても、3つの役割グループすべてが、この投稿タイプのものを編集できます。つまり、分類A、B、Cが実際に「割り当てられていない」ということはありません。

そうではなく、「分類Aでこの特定の投稿に用語が割り当てられているかどうかをチェックする」という意味で、編集するグループAに沿っている場合など、本当に意味があると思います。 (注:上記のコードが実際にこの場合に機能するかどうかはわかりません。さらに作業が必要になる場合があります。例えば、現在、これは実際のロール/グループではなくグループのユーザーメタキーを確認しています。)

1
majick

私は実際にそのプラグイン開発者ブログを掘り下げました、そしてこれは彼が洞察として提供するものです。

メタ機能は、投稿ごとにユーザーに付与される機能です。ここで扱っている3つは次のとおりです。

edit_post delete_post read_post

通常のブログ投稿の場合、WordPressはこれらをユーザーロールに付与されている特定の機能に「マップ」します。たとえば、投稿作成者である場合、またはedit_others_posts機能を持っている場合、ユーザーには投稿100のedit_post機能が与えられます。

カスタム投稿タイプを使用している場合、カスタム機能を設定している場合はこのマッピングは自動的には行われません。私たちは独自の解決策を考え出す必要があります。

このチュートリアルでは...

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

*まだコメントできませんので、回答として投稿しました。

0
Jarmerson