サポート » プラグイン » ユーザーロールに新しい権限が追加されないのはなぜでしょうか?

  • 解決済 echizenya

    (@echizenya)


    いつもお世話になっております。
    下記の質問についてご存知の方がいらっしゃいましたら、ご教示をお願いします。

    【質問の主旨】

    クラス内に’follower’というユーザーロールを設け、’follow_developer_activities’という新しい権限を設けたにも関わらず、
    Membersプラグインで、’follower’の権限を確認したところ、’follow_developer_activities’ という権限が存在しないことになっています。
    これはなぜでしょうか?

    【質問の補足】

    1.
    現在、「WordPressによるWebアプリケーション開発」という参考書のP38を写経中です。
    https://goo.gl/mtdFxJ

    2.
    pluginsディレクトリの下にwpwa-user-managerというディレクトリを設け、
    さらにclass-wpwa-user-manager.phpというファイルに、当該ユーザーロールと新しい権限を設けています。

    3.
    当該ユーザーロールと新しい権限を確認するために、参考書では、Membersプラグインをインストール有効化するように書かれていて、’follower’のEdit Roleを確認すると、’read’と’follow_developer_activities’にチェックが付いているスクリーンショットが掲載されています。一方、自分の画面を確認すると、’read’にしかチェックがつきません。

    Members
    https://wordpress.org/plugins/members/

    4.
    class-wpwa-user-manager.phpのコードは以下の通りです。

    <?php
    /*
      Plugin Name: WPWA User Manager
      Plugin URI:
      Description: User management module for the portfolio management application.
      Author: Rakhitha Nimesh
      Version: 1.0
      Author URI: http://www.innovativephp.com/
    */
    
    class WPWA_User_Manager {
      public function __construct() {
        // 初期化コード
        register_activation_hook( __FILE__ , array( $this, 'add_application_user_roles' ) );
        register_activation_hook( __FILE__, array( $this, 'remove_application_user_roles' ) );
        register_activation_hook( __FILE__, array( $this, 'add_application_user_capabilities' ) );
      }
    
      // フォロワー、開発者、メンバー 3種類のユーザーロール
      public function add_application_user_roles() {
          add_role( 'follower', 'Follower', array( 'read' => true ) );
          add_role( 'developer', 'Developer', array( 'read' => true ) );
          add_role( 'member', 'Member', array( 'read' => true ) );
      }
    
      // 既存のユーザーロールを削除する
      public function remove_application_user_roles() {
          remove_role( 'author' );
          remove_role( 'editor' );
          remove_role( 'contributor' );
          remove_role( 'subscriber' );
      }
    
      // フォロワーの最初の権限を与える
      public function add_application_user_capabilities() {
          $role = get_role( 'follower' );
          $role->add_cap( 'follow_developer_activities' );
      }
    }
    
    $user_manage = new WPWA_User_Manager();

    以上、よろしくお願い申し上げます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • msio

    (@msio)

    ちょうど新しく権限の作成をするところだったので確認してみました。
    私は本をもっていないので follow_developer_activities という「権限機能」はないようなので
    チェックがついているという状況がわかりませんでした。
    ロールの機能を紹介させていただきますと、
    名称ときめてその名称に権限としての機能を追加するものです。
    その権限の機能は準備されていて、そこに追加する構造が私にはわかりませんでした。
    add_role( ‘follower’, ‘Follower’, array( ‘read’ => true ) );
    こちらのコードで Follower と表示されている権限には read 機能しか与えられておらずそれ以上はないかと思います。
    ほかの機能を追加する場合はこちらのサイトが参考になるかと思います。
    Codex日本語版 ユーザーの種類と権限
    add_role 三番目のケイパビリティというパラメータが、どういう機能をするものを追加するか、という部分なので
    この指示名が違っているのではないかと思います。
    follow_developer_activities というロールセットを準備して これはフォロワーが制作作業をどうにかする的なことに必要な権限を許可されるセットとしてくまれているのであれば追加されてしかるべきかと思いますが
    私は地味に「書き込み可能、読み取りのみ可能、削除可能、変更不可能」といった具合に地味に追加して「フォロワー」というロールを作成するものなのではないかと思います。
    いまちょうどさわっただけなのでつたない考察になりますがご参考いただけると幸いです。

    
    <?php
    /*
      Plugin Name: WPWA User Manager
      Plugin URI:
      Description: User management module for the portfolio management application.
      Author: Rakhitha Nimesh
      Version: 1.0
      Author URI: http://www.innovativephp.com/
    */
    
    //クラス宣言 ★追加注釈
    class WPWA_User_Manager {
    //コンストラクタ クラス初期化時に実行されるコード群 ★追加注釈
    //以降の動作に初期値が必要なものはここで宣言しておくもの ★追加注釈
      public function __construct() {
        // 初期化コード
        register_activation_hook( __FILE__ , array( $this, 'add_application_user_roles' ) );
        register_activation_hook( __FILE__, array( $this, 'remove_application_user_roles' ) );
        register_activation_hook( __FILE__, array( $this, 'add_application_user_capabilities' ) );
      }
    
      // フォロワー、開発者、メンバー 3種類のユーザーロール
      public function add_application_user_roles() {
    //add_role( '権限名(機械で処理するため半角ローマ字)', '権限表示名(日本語でおk)', array( 追加する権限機能 ) );★追加注釈
          add_role( 'follower', 'Follower', array( 'read' => true ) );
          add_role( 'developer', 'Developer', array( 'read' => true ) );
          add_role( 'member', 'Member', array( 'read' => true ) );
      }
    
      // 既存のユーザーロールを削除する
      public function remove_application_user_roles() {
          remove_role( 'author' );
          remove_role( 'editor' );
          remove_role( 'contributor' );
          remove_role( 'subscriber' );
      }
    
      // フォロワーの最初の権限を与える
      public function add_application_user_capabilities() {
    //フォロワーという権限を読み出す★追加注釈
          $role = get_role( 'follower' );
    //読みだした権限に機能を付与する★追加注釈
    //-------------ここで付与する権限機能がCodexページで見た中に存在していませんがどうなのでしょうか-----------★追加注釈
          $role->add_cap( 'follow_developer_activities' );
      }
    }
    
    $user_manage = new WPWA_User_Manager();
    
    トピック投稿者 echizenya

    (@echizenya)

    msioさん。
    ご丁寧なメッセージありがとうございます!

    ここで付与する権限機能がCodexページで見た中に存在していませんがどうなのでしょうか

    ご指摘のとおり、Codexの中には当該権限機能は存在しませんね。一方で参考書のP.32からP.39を読み返すと、
    ただCodexで指し示されている権限以外にも、新たに権限を作ることができるようなことが書かれています。
    なので、新たな権限を追加できるのかどうかは、何とも言い難いところです。

    follow_developer_activities というロールセットを準備して これはフォロワーが制作作業をどうにかする的なことに必要な権限を許可されるセットとしてくまれているのであれば追加されてしかるべきかと思いますが
    私は地味に「書き込み可能、読み取りのみ可能、削除可能、変更不可能」といった具合に地味に追加して「フォロワー」というロールを作成するものなのではないかと思います。

    このアドバイスに基づいて、add_application_user_rolesメソッドの定義を

    add_role( 'follower', 'Follower', array( 'follow_developer_activities' => true ) );

    add_role( 'follower', 'Follower', array( 'read' => true, 'follow_developer_activities' => true ) );

    のように書き換えてみましたが、相変わらず’follow_developer_activities’権限をMembersプラグインで
    確認することはできませんでした。

    今回の写経は自分の練習用としてローカル開発環境で行っています。また一般公開するつもりもないので、
    参考書の通りに表示されなくても、先に進めようかと考えています。

    せっかくアドバイスを頂いたにも関わらず、生かし切れずに心苦しい限りですが、いかがでしょうか?
    以上、よろしくお願い申し上げます。

    msio

    (@msio)

    おつかれさまです。
    follow_developer_activities という権限についてなのですが、繰り返しになる説明があるかもしれません。
    その折にはお聞き苦しいところもあるかと思いますがご容赦くださいませ。

    ユーザー、というログインなどに使用する対話のキーを作成するのはご存じのとおりだと思います。
    そのユーザーがなにをするのか、なにをしていいのかというのがロールなのですが、これは
    「書き込み可能、読み取りOK、どこまで閲覧できるか、ここははじく」などの権限ひとつづつを合わせてセットにしたもののようです。
    おおよそアドミニストレータやデベロッパーでつかっていいことわるいこと、をセットしたものだと思います。
    これを作り上げるのに、条件において可能か不可かという項目が権限機能で「書き込みOK」writable や read_only などの項目です。
    いまされようとしているのはその機能の中に「follow_developer_activities」があるということとして、その権限を付与する、ということなのですが、「follow_developer_activities」とは何をするものなのかがない状態、すくなくとも私にはわからない状態です。
    「follow_developer_activities」というのはデータベースに変更を加えることができる機能なのか、読み出すことができる機能なのかがわからないのです。このわからないものを「使用可能」にすることは、基本的にできないのではないかと思い「follow_developer_activities」という機能を追加されているのだとしたら、付与することはできるのではないかとおもうのです。

    そこで憶測なのですが follow_developer_activities はその記載のとおり
    「開発者が実行した結果」でチェックは「なりました」の意味をしていて
    アンダーバーで文字を区切ったりチェックをいれたりということでまるでコードのように
    表記されてはいるものの、「開発者の任意設定が反映されますよ」という「表現」だったということはないでしょうか。

    というわけで私は「read」権限のみを付与して作成したベーシックなロールに「delete_posts」投稿削除の機能を追加したり「upload_files」といった機能を追加して「follower」という「ロール」を完成させてるとよいのではないかと思った次第です。

    わたしもあまりよくわかっていないので足らぬ間違いなどしているかもしれませんが、思いつくかぎりはここまでになるかと思います。



    トピック投稿者 echizenya

    (@echizenya)

    msioさん。
    いつもコメントありがとうございます。

    follow_developer_activities はその記載のとおり
    「開発者が実行した結果」でチェックは「なりました」の意味をしていて
    アンダーバーで文字を区切ったりチェックをいれたりということでまるでコードのように
    表記されてはいるものの、「開発者の任意設定が反映されますよ」という「表現」だったということはないでしょうか。

    再度、参考書の該当箇所及び、msioさんが先のコードでコメントアウトしてくださった箇所を読み返すと、
    follow_developer_activitiesはがMembersプラグインで表示されるのは、あくまでも「一例」だと思うようになりました。

    public function add_application_user_capabilities() {
    //フォロワーという権限を読み出す★追加注釈
          $role = get_role( 'follower' );
    //読みだした権限に機能を付与する★追加注釈
    //-------------ここで付与する権限機能がCodexページで見た中に存在していませんがどうなのでしょうか-----------★追加注釈
          $role->add_cap( 'follow_developer_activities' );
      }

    ‘follow_developer_activities’ ← これがまずない ← 個人で作る?(必要性が…)
    ないので付与されない = つくる = つくれば付与できる

    画像ファイルで教えてくださったとおり、もしfollow_developer_activitiesに権限機能を新しく追加したかったら、

    $role = get_role( 'follower' );

    $role->add_cap( 'follow_developer_activities' );
    の間に自分で何か定義をしないといけないと思います。

    まだ不慣れなもので、follow_developer_activitiesに権限機能をどうやって付けるのかは
    分かりませんが、参考書の意図が読み取れたことは大きな成果だと思いますので、このトピックを終了いたします。

    msioさん。本当にご丁寧なアドバイスありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ユーザーロールに新しい権限が追加されないのはなぜでしょうか?」には新たに返信することはできません。