Ibexa DXP の権限管理について

権限¶
許可の概要¶
新しいユーザーには、明示的にアクセス権が付与されていない限り、システムのどの部分に対する権限もありません。アクセスするには、通常、所属するユーザーグループに割り当てられているロールを継承する必要があります。

各ロールには、1つ以上のポリシーを含めることができます。ポリシーは、モジュール内の単一の関数へのアクセスを許可するルールです。たとえば、section/assignポリシーでは、ユーザーがコンテンツをセクションに割り当てることができます。

ポリシーをロールに追加する場合、1つ以上の制限を使用してポリシーを制限することもできます。制限付きのポリシーは、制限内の条件が満たされた場合にのみ適用されます。たとえば、「ブログ投稿」コンテンツタイプに制限のあるcontent/publishポリシーではContentType、ユーザーはブログ投稿のみを公開でき、他のコンテンツは公開できません。

ポリシーのような制限は、ユーザーが 実行できないことではなく、ユーザーが実行できることを指定します。ASectionの制限は、例えば、与えていない、選択されたセクションへのユーザーのアクセスを禁止し、それを。

詳細および権限設定などの権限のユースケースについては、使用可能な制限を参照してください。

ポリシーの組み合わせ¶
1つのロールのポリシーは、またはではなく、および関係 に関連付けられているため、ポリシーに複数の制限がある場合は、それらすべてを適用する必要があります。

複数の制限をandではなくorの関係と組み合わせる場合は、ポリシーを2つに分割し、それぞれにこれらの制限の1つを含めることができます。

ユーザーへの役割の割り当て¶
すべてのユーザーまたはユーザーグループは、多くの役割を持つことができます。ユーザーは、管理者、編集者、サブスクライバーなど、多くのグループに属することもできます。

ユーザーに直接ロールを割り当てないようにすることをお勧めします。代わりに、ユーザーグループに割り当てられた一般的な役割でカバーできるようにコンテンツを整理してみてください。

グループを使用すると、管理が簡単になり、安全性が高まります。また、システムパフォーマンスも向上します。特定のユーザーに追加する役割の割り当てと複雑なポリシーが多いほど、検索/読み込みクエリはより複雑になります。これは、それらが常にアクセス許可を考慮に入れるためです。

利用可能なポリシー¶
モジュール	関数	効果
all modules	all functions	利用可能なすべての権限を付与する
content	read	フロントエンドとバックエンドの両方でコンテンツを表示する
 	diff	未使用
 	view_embed	別のコンテンツアイテムに埋め込まれたコンテンツを表示する（ユーザーがそれを個別のコンテンツアイテムとして表示することを許可されていない場合でも）
 	create	新しいコンテンツを作成します。注：このポリシーがなくても、ユーザーは編集モードに入ることができますが、コンテンツアイテムでの作業を完了することはできません。
 	edit	既存のコンテンツを編集する
 	publish	コンテンツを公開します。このポリシーがないと、ユーザーは下書きを保存するか、レビューのために送信することしかできません（IbexaExperienceで）
 	manage_locations	場所を削除し、コンテンツをゴミ箱に送信します
 	hide	コンテンツの場所を非表示にして表示する
 	reverserelatedlist	コンテンツアイテムに関連するすべてのコンテンツを表示します（ユーザーがコンテンツアイテムを個別のコンテンツアイテムとして表示することを許可されていない場合でも）
 	translate	未使用
 	remove	場所を削除し、コンテンツをゴミ箱に送信します
 	versionread	公開後にコンテンツを表示し、サイトモードでコンテンツをプレビューする
 	versionremove	アーカイブされたコンテンツバージョンを削除する
 	translations	管理者で言語リストを管理する
 	urltranslator	コンテンツアイテムのURLエイリアスを管理する
 	pendinglist	未使用
 	restore	ごみ箱からコンテンツを復元する
 	cleantrash	ゴミ箱を空にします（ユーザーが個々のコンテンツアイテムにアクセスできない場合でも）
 	unlock	アクションを実行するためにユーザーにロックされたドラフトのロックを解除する
Content Type	update	既存のコンテンツタイプを変更します。新しいコンテンツタイプを作成するためにも必要
 	create	新しいコンテンツタイプを作成します。既存のコンテンツタイプを編集するためにも必要
 	delete	コンテンツタイプを削除する
state	assign	オブジェクトの状態をコンテンツアイテムに割り当てる
 	administrate	オブジェクトの状態を表示、追加、編集する
role	assign	ユーザーとユーザーグループに役割を割り当てる
 	update	既存の役割を変更する
 	create	新しい役割を作成する
 	delete	役割を削除する
 	read	管理者で役割リストを表示します。他のすべての役割関連のポリシーに必要
section	assign	セクションをコンテンツに割り当てる
 	edit	既存のセクションを編集して新しいセクションを作成する
 	view	Adminでセクションリストを表示します。他のすべてのセクション関連のポリシーに必要
setup	administrate	管理者にアクセス
 	install	未使用
 	setup	未使用
 	system_info	管理者の[システム情報]タブを表示します
site	view	トップナビゲーションで「サイト」を表示
 	create	サイトファクトリでサイトを作成する
 	edit	サイトファクトリでサイトを編集する
 	delete	サイトファクトリからサイトを削除する
 	change_status	サイトファクトリへの、LiveまたはOfflineサイトファクトリ内のサイトのパブリックアクセスのステータスを変更する
user	login	アプリケーションにログインします
 	password	未使用
 	preferences	ユーザー設定へのアクセスと設定
 	register	/registerルートを使用して登録する
 	selfedit	未使用
 	activation	未使用
workflow	change_stage	指定されたワークフローのステージを変更します
comparison	view	バージョン比較を表示
segment	read	セグメント情報をロードする
create	セグメントを作成する
update	セグメントの更新
remove	セグメントを削除
assign_to_user	セグメントをユーザーに割り当てる
segment_group	read	セグメントグループ情報をロードする
create	セグメントグループを作成する
update	セグメントグループの更新
remove	セグメントグループを削除する
siso_policy
checkout	チェックアウトプロセスにアクセスする
edit_invoice	請求書の住所を編集する
edit_delivery	配送先住所を編集する
delegate	委任画面にアクセス
dashboard_view	バックオフィスのコックピットにアクセスする
forms_profile_edit	ユーザープロファイルにアクセスする
manage_orders	注文管理画面にアクセス
manage_prices	[価格管理]タブで作業する
manage_stock	在庫管理タブでの作業
manage_shipping_costs	[送料管理]タブで作業します
manage_config	eコマースの構成設定にアクセスする
lostorder_list	バックオフィスで失われた注文にアクセスする
lostorder_manage	失われた注文を管理する
lostorder_process	失われた注文を処理する
orderhistory_view	注文履歴を表示
quickorder	クイックオーダーにアクセスする
read_basket	バスケットを見る
write_basket	バスケットを変更する（追加、更新、削除）
see_product_price	カタログの製品価格を参照してください
siso_customercenter
 	approve	カスタマーセンターでバスケットを承認する
buy	カスタマーセンターユーザーとして購入
view	カスタマーセンターのユーザー管理にアクセスする
siso_control_center
 	manage_erp_log	ERPログへのアクセス
manage_emails	コントロールセンターの電子メールアーカイブにアクセスする
manage_jobs:	コントロールセンターのeコマースジョブにアクセスする
ルートの権限¶
ポリシーごとに特定のルートへのアクセスを制限できます。


siso_quick_order:
    path: /quickorder
    defaults:
        _controller: siso_quick_order.quick_order_controller:quickOrderAction
        policy: siso_policy/quickorder
この構成を使用して、ユーザーが単一のポリシーを持っているかどうかを確認できます。セクションをチェックしたり、複数のポリシーを一度にチェックしたりするなど、より複雑なルールが必要な場合は、コントローラーで権限チェックを実装します。

カスタムコントローラーのアクセス許可¶
performAccessCheck()メソッドを実装することにより、カスタムコントローラーへのアクセスを制御できます。

次の例では、section/viewポリシーがない限り、ユーザーはコントローラーにアクセスできません。


use eZ\Publish\Core\MVC\Symfony\Security\Authorization\Attribute;

public function performAccessCheck(): void
{
    parent:performAccessCheck();
    $this->denyAccessUnlessGranted(new Attribute('section', 'view'));
}
Attribute 3つの引数を受け入れます。

moduleポリシーモジュールです（例content）
functionモジュール内の関数です（例read）
limitationsチェックするオプションの制限です。ここでは、2つのキーを提供できます。
valueObjectたとえば、チェックするオブジェクトですContentInfo。
targets操作のターゲットである値オブジェクトのテーブルです。たとえば、コンテンツをセクションに割り当てることができるかどうかを確認するには、セクションをとして指定しtargetsます。 targetsLocation、Object state、Sectionオブジェクトを受け入れます。
ユーザーアクセスの確認¶
ユーザーが操作にアクセスできるかどうかを確認するには、このisGranted()メソッドを使用します。たとえば、コンテンツをセクションに割り当てることができるかどうかを確認するには、次のようにします。


$hasAccess = $this->isGranted(
    new Attribute( 'section', 'assign', array( 'valueObject' => $contentInfo, 'targets' => $section ) )
);
権限リゾルバー（eZ\Publish\API\Repository\PermissionResolver）を使用することもできます。このcanUser()メソッドは、ユーザーが選択したオブジェクトを使用して特定のアクションを実行できるかどうかを確認します。

例：指定された場所で提供されたコンテンツアイテムの権限をcanUser('content', 'edit', $content, $location ); 確認しますcontent/edit。

コントローラアクションへのアクセスをブロックする¶
コントローラの特定のアクションへのアクセスをブロックするには、アクションの定義に以下を追加します。


$this->denyAccessUnlessGranted(new Attribute('state', 'administrate'));