Symfony Securityの章に従って読み込まれたデータベースに自分のユーザとロールがあります。ユーザーはAdvancedUserInterface、\ Serializable、 を実装します。ロールはRoleInterfaceを実装します。 私の役割エンティティ:Symfonyがロールをロードするために使用するロールレポジトリのメソッド
マイRolesPrivilegesエンティティは、役割と権限との関係と同じ種類で1つのリレーションに多くと接続されているAppBundle\Entity\Roles:
type: entity
table: Roles
repositoryClass: AppBundle\Repository\Roles
[...]
oneToMany:
users:
targetEntity: Users
mappedBy: role
cascade: [persist]
privs:
targetEntity: RolesPrivileges
mappedBy: role
cascade: [persist]
:
AppBundle\Entity\RolesPrivileges:
type: entity
table: RolesPrivileges
repositoryClass: AppBundle\Repository\RolesPrivileges
id:
role:
associationKey: true
type: integer
privilege:
type: integer
associationKey: true
fields:
related:
type: boolean
nullable: FALSE
options:
default: 0
manyToOne:
role:
targetEntity: Roles
inversedBy: privs
joinColumn:
name: role_id
referencedColumnName: id
privilege:
targetEntity: Privileges
joinColumn:
name: privilege_id
referencedColumnName: id
そして最後に特権エンティティ:
AppBundle\Entity\Privileges:
type: entity
table: Privileges
id:
[...]
fields:
short:
type: string
length: 50
nullable: FALSE
コントローラの各アクションに(ログインしたユーザーの)詳細なアクセス権を確認できるように書いてあります。ユーザーに割り当てられている役割に関連する権限を繰り返し実行します。
問題は、SymfonyがPrivilegesテーブルのエントリごとにdbに対して別々のクエリを実行していることです。コントローラ内で、クエリを使用してすべてをフェッチし、保護された変数に格納することで修正しました。
しかし、(ロールエンティティで定義されたメソッドを使用して)twigテンプレートから権限を反復するときに発生する同じ問題を解決する方法がわかりません。私はRolesRepositoryのメソッドの1つを再定義して、すべての権限を1つのクエリで取得できると考えていました。どうやってやるの?
私の心に来る唯一の解決策は、(それは醜いです)、以前にDBから移入(1つのクエリをコントローラのrender()メソッドを再定義し、さまざまな権限を渡すことです)をつけてそれを繰り返します。しかし、私はより良い修正を探しています。 –