EC-CUBE3がベースにしているSymfony2では各ページに表示権限を与えることができます。
この仕組みによってログインユーザーのみページを表示する・しないという設定ができます。
$app[‘security.access_rules’]による指定を行います。
/src/Eccube/Application.phpに下記のようなコードがありますので、ここに指定したいアクセス制限を記述します。
$this['security.access_rules'] = array( array("^/{$this['config']['admin_route']}/login", 'IS_AUTHENTICATED_ANONYMOUSLY'), array("^/{$this['config']['admin_route']}/", 'ROLE_ADMIN'), array('^/mypage/login', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/mypage/withdraw_complete', 'IS_AUTHENTICATED_ANONYMOUSLY'), array('^/mypage/change', 'IS_AUTHENTICATED_FULLY'), array('^/mypage', 'ROLE_USER'), );
例えば、array(‘^/mypage’, ‘ROLE_USER’)は/mypage以下のURLを会員ユーザー(顧客)のみ表示許可するという設定です。
ただし、より上位にarray(‘^/mypage/change’, ‘IS_AUTHENTICATED_FULLY’),という記載があり、/mypage/changeではそちらが優先されます。
/campaignというURLを会員にのみ表示したい場合は、array(‘^/campaign’, ‘ROLE_USER’),という要素を配列に追加すればOKです。
なお、Symfonyの権限は分かりにくいので以下にEC-CUBE3で使用する権限をまとめておきます。
・ROLE_ADMIN
EC-CUBE3では管理者としてログインしていることを意味します。
・ROLE_USER
EC-CUBE3では顧客としてログインしていることを意味します。
・IS_AUTHENTICATED_ANONYMOUSLY
匿名ユーザーを含みます。要はログインしていなくても表示できるという意味です。
・IS_AUTHENTICATED_REMEMBERED
「次回から自動的にログインする」機能によってログインしたユーザーです。
・IS_AUTHENTICATED_FULLY
IS_AUTHENTICATED_REMEMBEREDの対比です。自動的にログインする機能ではなく、当セッション中にフォームで認証を行いログインしたユーザーです。
これらのROLEを使うことでより柔軟なサイトを作ることができますね!
EC-CUBE3をご利用の方はぜひお試しください。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。