エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法

   

CakePHP3 CakeDC/Usersで所有レコードのみ閲覧、更新、削除する権限設定方法

 

CakePHP3のユーザ管理プラグイン「CakeDC/Users」を使用して権限管理をする際の前提条件

 
この記事では、下記を実装するための解説です。

  • CakePHP3で、ユーザ管理プラグイン「CakeDC/Users」を使用してユーザ管理をするシステムを構築している。
  • その中で、ユーザAが登録した情報は、ユーザAが所有者として登録され、その登録情報はユーザAのみが見ることができ、更新、削除も所有者 Aのみが行える。

という機能を実装することを想定しています。
 
まず、CakePHP3にユーザ管理プラグイン「CakeDC/Users」を導入する方法については、下記の記事を参考にしてください。
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
 
また、「/config/users.php」「/config/permissions.php」ファイルを作成し、ログイン認証に関連する設定を記述していく方法については、下記の記事を参考にしてください。
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
 
 
これを踏まえた上で、「/config/permissions.php」ファイルに、権限を設定していく方法を解説していきます。
 
 

「/config/permissions.php」ファイルのサンプル

 
「/config/permissions.php」ファイルに記述する権限設定のサンプルは以下のようになります。
 

 
上記の前半は、ユーザ権限が「user」の場合、プラグインが「CakeDC/Users」で、コントローラーが「Users」の処理のうち、アクションが「profile」もしくは「logout」である場合はアクセスを許可する、という設定になっています。
 
指定する処理が複数ある場合は、「'action' => ["profile","logout"],」の様に配列で指定します。
'role' => ['user'],」のように、指定するものが 1つしかない場合でも配列で指定することもできますので、全部配列で指定する、と覚えておいても問題はないでしょう。
 
 

ログアウトのアクションは必ず登録する

 
ちなみに、この権限設定をする場合は、何はともあれ下記のログアウトの処理だけは記述しておくようにしておきましょう。
これがないとログアウトできなくなります。
 

 
 

「*」を使ってすべての処理を許可対象にすることもできる

 
また、下記のように、具体的な処理を指定するのではなく、「*」を指定することで、すべての処理を許可する、という指定方法もあります。
 

 
上記は、会員用のコンテンツ「http://example.com/member/」をすべて利用を許可する、という指定になります。
 
 

「superuser」は設定しなくてもすべての機能にアクセスできる

 
下記の設定は、「『superuser』はすべての機能にアクセスできる」という設定ですが、これはわざわざ設定しなくても、『superuser』はすべての機能にアクセスできます。
 

 
 

所有権限があるレコードのみ更新、削除ができる設定

 
最初のサンプルの後半部分の下記は、コントローラー「Blogs」で管理されるブログ記事を、アクション「edit(更新)」や「delete(削除)」できるのは、ログインしているユーザの「user_id」が、テーブル「blogs」にある「user_id」の値と同じ時のみ処理を許可する、という設定になります。
 

 
ちなみに、この設定を行っても、「superuser」権限があるユーザは、他のユーザのレコードも更新、削除することができます。
(「superuser」のユーザが更新しても、テーブル「blogs」にある「user_id」の情報は更新されません。)
 
 

所有権限があるレコードのみ更新、削除ができる設定・別テーブルに IDを持っている場合

 
上記は、レコードの所有者の情報が保存されているカラム「user_id」が、更新するレコードと同じテーブル内にある場合の設定ですが、所有者情報を管理しているテーブルが別のテーブル「BlogsUsers」にある場合は、以下のように設定します。
 

 
 

CakePHP3の関連記事

CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説

CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。

CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ

CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点

ID以外のカラムでアソシエーション(連携)させて詳細ページを表示させる際の考え方と注意点をサンプルソースを用いて解説しています。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説

CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.1.5対応
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。