エス技研

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の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

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

Message

メールアドレスが公開されることはありません。

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

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

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

  関連記事

CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説

WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。

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

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

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

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

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

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

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

CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説

CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。

CakePHP 2.3 ログイン、操作履歴、アクセスログ出力

CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。