いくつかのACL権限を必要とするSymfony2アプリケーションで忙しいです。
私はSymfony2の初心者なので、これを正しい方法で見ているのかどうかわかりません。
私には複数のクライアントがあり、それぞれに複数のアカウントがあります。
すべてのクライアントとすべてのアカウントにアクセスできるスーパー管理者(ROLE_SUPER_ADMIN)がいます。次に、管理者ロール(ROLE_ADMIN)があります。このロールは、特定のクライアントとそのクライアントのすべてのアカウントへのアクセスのみを許可されます。次に、エージェント(ROLE_AGENT)があります。これは、クライアントの特定のアカウントに対する権限のみを持つ必要があります。
symfonyのドキュメントで、ユーザーに特定のオブジェクトへのアクセスを許可するために、次のコードを使用できることを確認しました。
// creating the ACL
$aclProvider = $this->get('security.acl.provider');
$objectIdentity = ObjectIdentity::fromDomainObject($account);
$acl = $aclProvider->createAcl($objectIdentity);
// retrieving the security identity of the currently logged-in user
$securityContext = $this->get('security.context');
$user = $securityContext->getToken()->getUser();
$securityIdentity = UserSecurityIdentity::fromAccount($user);
// grant owner access
$acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER);
$aclProvider->updateAcl($acl);
したがって、新しいアカウントを作成するときに、現在ログインしているユーザーに、新しく作成したアカウントへのアクセスを許可できます。しかし、クライアントの他のすべてのユーザーにアカウントへのアクセスを許可するにはどうすればよいですか?
すべてのユーザーをループして、すべてのユーザーに対して上記のコードを実行したくありません。
したがって、たとえば、すべてのクライアントを表示するときは、ユーザーがアクセスできるクライアントを知る必要があります。アカウントを表示するときは、ユーザーがアクセスできるアカウントを知る必要があります。
また、新しいユーザーをクライアントに追加する場合、ユーザーは自動的にそのクライアントのすべてのアカウントにアクセスできる必要があります。
ちなみに、ユーザーがアカウント/クライアントにアクセスできるかどうかだけを知る必要があります。ユーザーがアクセス権を持っている場合、ユーザーは自動的に表示/編集/削除などを許可されます。