質問 > 管理機能 > 別の管理画面を作成する方法について |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
beginnerA |
投稿日時: 2023/4/19 11:04
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2020/6/13 居住地: 投稿: 7 |
別の管理画面を作成する方法について ▼テンプレート
▼テンプレート [EC-CUBE] 4.2.0 [OS] Linux [PHP] 8.1.9 [データベース] MySQL 8.0.28 [WEBサーバ] Apache [ブラウザ] Chrome [導入プラグインの有無] プリインストールプラグイン [カスタマイズの有無] オリジナルプラグイン作成中 [現象] EC-CUBE4.2を勉強を兼ねて色々とカスタムをしてみています。 システム設定 > メンバー管理 よりメンバーの権限がデフォルトで ・ システム管理者 ・ 店舗オーナー と2つ用意されているかと思います。 新たに ・メンバー というものを作成し、そのメンバーに関しては%admin_route%のディレクトリ配下ではなく、 hoge.com/○○/login hoge.com/○○/index hoge.com/○○/... など、別の管理画面を持たせたいと思っています。 新規ディレクトリ(○○の部分のディレクトリ)の配下のページを表示させる事はできているので、ここにログインの判定をつけたいと思っています。 AdminControllerの /** * @Route("/%eccube_admin_route%/login", name="admin_login", methods={"GET", "POST"}) * @Template("@admin/login.twig") */ public function login(Request $request) { if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) { return $this->redirectToRoute('admin_homepage'); } /* @var $form \Symfony\Component\Form\FormInterface */ $builder = $this->formFactory->createNamedBuilder('', LoginType::class); $event = new EventArgs( [ 'builder' => $builder, ], $request ); $this->eventDispatcher->dispatch($event, EccubeEvents::ADMIN_ADMIM_LOGIN_INITIALIZE); $form = $builder->getForm(); return [ 'error' => $this->helper->getLastAuthenticationError(), 'form' => $form->createView(), ]; } をコピーして /** * @Route("/○○/login", name="○○_login", methods={"GET", "POST"}) * @Template("○○/login.twig") */ public function login(Request $request) { if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) { return $this->redirectToRoute('○○_homepage'); } /* @var $form \Symfony\Component\Form\FormInterface */ $builder = $this->formFactory->createNamedBuilder('', ○○LoginType::class); $form = $builder->getForm(); return [ 'error' => $this->helper->getLastAuthenticationError(), 'form' => $form->createView(), ]; } /** * ○○ 別管理画面ホーム * * @param Request $request * * @return array * * @throws NoResultException * @throws \Doctrine\ORM\NonUniqueResultException * * @Route("/○○/", name="○○_homepage", methods={"GET"}) * @Template("/○○/index.twig") */ public function index(Request $request) { } のように○○Controller.phpを作成しました。 if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {・・・ の部分をコメントアウトすると、○○/inde.twigの内容は表示されているので、Controllerとtwigは結びついて期待通りの動きをしていると思います。 該当部分をそのまま動かすと、○○_loginより先に進む事ができません。 試しに%eccube_admin_route%へのログイン確認も行いましたが、こちらは正常にログインが可能です。 おそらく○○_loginのページでログインの判定ができていないのだと思うのですが、行き詰まってしまったのでアドバイスを頂けたら嬉しいです。 よろしくお願い致します ![]() |
H1R0 |
投稿日時: 2023/4/20 15:10
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2020/9/15 居住地: 投稿: 13 |
Re: 別の管理画面を作成する方法について ログイン画面が表示できるが、IDとパスワードにメンバー権限のものを正しく入力しても○○/inde.twigの内容が表示されない認識で回答します。
間違ってたらすいません。 EC-CUBEではapp/config/eccube/packages/security.yamlにログインに関する設定が記載されています。 このファイルのsecurity.firewalls.adminの項目を参考に新規ディレクトリ用の設定を追加すればうまくいくかと思います。 https://github.com/EC-CUBE/ec-cube/blob/4.2/app/config/eccube/packages/security.yaml#L24-L42 yamlに記載されている設定の詳細はSymfonyの公式ドキュメントに記載されていますので、こちらも参考にしてみてください! https://symfony.com/doc/5.4/security.html |
beginnerA |
投稿日時: 2023/4/20 17:28
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2020/6/13 居住地: 投稿: 7 |
Re: 別の管理画面を作成する方法について ご返信ありがとう御座います。
参考URL等を見させて頂きました。 app/config/eccube/packages/security.yaml に追加する形でログイン後に遷移まではうまくいきました。 プラグインに組み込んでみようと思っているのですが、service.yamlは Plugin/Resource/config/services.yaml にて拡張できると思います。 security.yamlも同様にプラグインディレクトリ内で拡張できるのでしょうか? Plugin/Resource/config/packages/security.yaml Plugin/Resource/config/security.yaml を試してみました。 security.yamlの内容は security: # https://symfony.com/doc/current/security.html#initial-security-yml-setup-authentication firewalls: hoge: pattern: '^/hoge/' provider: member_provider form_login: enable_csrf: true check_path: hoge_login login_path: hoge_login default_target_path: hoge_homepage username_parameter: 'login_id' password_parameter: 'password' use_forward: false success_handler: eccube.security.success_handler failure_handler: eccube.security.failure_handler login_throttling: max_attempts: '%eccube_login_throttling_max_attempts%' interval: '%eccube_login_throttling_interval%' logout: path: hoge_logout # success_handler: eccube.security.logout.success_handler target: hoge_login の形にしています。 上記の内容では拡張できていないようなので、そもそもsecurity.yamlは元のソースを直接編集するしかないのでしょうか。 |
mcontact |
投稿日時: 2023/4/20 22:09
対応状況: −−−
|
仙人 ![]() ![]() 登録日: 2022/1/22 居住地: 投稿: 629 |
Re: 別の管理画面を作成する方法について https://ruco.la/memo/352
|
H1R0 |
投稿日時: 2023/4/21 8:32
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2020/9/15 居住地: 投稿: 13 |
Re: 別の管理画面を作成する方法について 私がプラグイン開発に関しての知識が乏しいので、EC-CUBEのソースを読んでみました。
Plugin/Resource/config配下はservices.(php|xml|yaml|yml)しか読み込まない仕組みになっているようです。 |
beginnerA |
投稿日時: 2023/4/21 11:57
対応状況: 確認中
|
新米 ![]() ![]() 登録日: 2020/6/13 居住地: 投稿: 7 |
Re: 別の管理画面を作成する方法について >> mcontact 様
ありがとう御座います。 https://ruco.la/memo/352 こちらを拝見させて頂き、app/config/eccube/packages/配下にhoge.yamlを配置してみました。 ・同ディレクトリのsecurity.yamlをコピー、リネームした場合 動作は元のsecurity.yamlの動作 ・上記で作成したhoge.yamlを追加したい内容に変更した場合 You are not allowed to define new elements for path "security.firewalls". Please define all elements for this path in one config file. となり、新しい要素は追加できないというような内容の表示かとおもいます。 Customizeディレクトリの配置も読み込まないとなると、security.yamlについては元ファイルを編集して1つのファイルで構成する必要があるように思えています... >> H1R0 様 ありがとう御座います。 元のファイルを変更するパターンでは https://blog.junpeko.com/eccube-security こちらも参考にさせて頂き、 ・app/config/eccube/packages/security.yaml ・src/Eccube/DependencyInjection/EccubeExtension.phpの71行目$accessControl内 を編集する事で期待する動きをする事はわかりました。 プラグイン化するとなると、必要な要件としては上記のファイルをプラグインで拡張などをする必要があるという事になります。 私も勉強中なのであまり詳しくなく現状では、H1R0 様のおっしゃる通り、自身で調べてもプラグインではservice.yamlしか読み込まない仕組みになっているような理解でいます。 ケースとしては、システム管理者以下でログインの入り口を別に設けたい事はあると思います。 現状の権限設定などだけではなく、下位権限ユーザー向けによりシンプルなUIの管理画面を作成したい場合など、管理画面の入り口を増やし別のUIを作れるような仕組みになっているといいと思っています。 まだ勉強が足りていなくて答えに辿り着いていないだけかもしれないので、引き続き自分でも調べてみます。 別の方法をご存知の方がいましたら情報を頂けると嬉しいです。 2023/04/24追記====== security.yamlはsymfonyの仕様上、一つのファイルにまとめる必要があり外部ファイルでの拡張はできない。 これはセキュリティ上のためであり、元ファイルを直接変更するしかないという情報が現状たどり着いている結果です。 |
mariacensa |
投稿日時: 2023/5/6 16:37
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2023/5/6 居住地: 投稿: 1 |
Re: 別の管理画面を作成する方法について jili fishing games is the hottest online fishing in the world today. Try it to get a high percent of winning rate and bonuses in the game.
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |