私はsymfonyプロジェクトに取り組んでおり、私はこれを初めて知ったので、あなたが解決したいユーザの認証に質問があります。Symfony2異なるURLにアクセスするために2つの異なるユーザ名を持つユーザを認証する方法
私のプロジェクトは教師タイプのユーザーがusername
とpassword
のデータベースを持つ学校についてのものです。ユーザー名は、t
の後に個人識別番号(例えば、t48945110
)が続きます。さらに、教師にはブール属性があり、どれが学校のプリンシパルであるかを示します(1つしかありません)。
次のように私のプロジェクトのセキュリティ設定は次のとおりです。以上により
Secutiry.yml
security:
firewalls:
intranet:
pattern: ^/
anonymous: ~
provider: teachers
form_login:
login_path: /login
check_path: /login_check
# use_referer: true
default_target_path: /teacher
logout: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: admin/, roles: ROLE_ADMIN }
- { path: /teacher, roles: ROLE_TEACHER }
providers:
teachers:
entity: { class: School\BackendBundle\Entity\Teacher, property: username}
encoders:
School\BackendBundle\Entity\Teacher: { algorithm: sha512 }
、教師はログインフォームを通して彼のプライベートの部分にaccerderことができますが、問題私はディレクター(データベース内の属性(director=1
)を持つ教師)にアクセスしたいときに持っています。この教師が別のユーザー名でアクセスできるようにしたいのですが、データベースに保存せず、メインレターを変更してから、認証の際に教師の通常のユーザー名を探し、ディレクターがそれをリダイレクトするかどうかを確認してください/teacher
の代わりに/ admin
例えば、ユーザ名t48945110で教師として自分の個人領域にアクセスし、ユーザ名d48945110
で学校の管理領域にアクセスすることができる学校の長。
この考え方は、2つの異なるログインフォームを作成するのではなく、アプリケーションのすべてのユーザー(学生、教師、ディレクターなど)にアクセスすることです。
イベントリスナーなどで処理できるかどうかわかりません。私はあなたの助けに感謝します。
これは私にとってはやや複雑です。ユーザー名には、特定のユーザーが持つ役割についての兆候があってはなりません。 admin /に1つの管理インターフェースを置いて、教師のためにACL経由でアクセス権を制限するのはなぜですか? – Atan
こんにちは@Atan、返信いただきありがとうございます。この場合、管理者にアクセスするには、教師はプライベートエリアの前にアクセスし、そこから管理部分を開くオプションを追加する必要があります。それは私の主なアイデアでしたが、教師が2つの異なる形式を使わずにそれぞれの部分に個別にアクセスできる方法があればわかりませんでした。 – Joseph
いいえ、私は、単一のログインフォームを使用して、すべてのユーザー(学生、教師、ディレクター)をadmin /にリダイレクトすることを意味しました。その後、ACLルールを使用して、役割に応じて管理パネル内のユーザーのアクセスを制限します。たとえば、ディレクターにはROLE_TEACHERとROLE_ADMINの2つの役割があります。教師にはROLE_TEACHERしかありません。 – Atan