バージョン選択

フォーラム

メニュー

オンライン状況

59 人のユーザが現在オンラインです。 (50 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 58
red もっと...

サイト内検索

質問 > 管理機能 > 別の管理画面を作成する方法について

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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
居住地:
投稿: 1350
Re: 別の管理画面を作成する方法について
https://ruco.la/memo/352


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

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.
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は90,091名です
総投稿数は110,312件です

投稿数ランキング

1
seasoft
7369
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1681
8
red
1571
9
mcontact
1350
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.