我正在開發一個symfony項目,我在用戶身份驗證中遇到了一個問題,我希望您解決這個問題,因爲我是新手。Symfony2如何驗證具有兩個不同用戶名的用戶以訪問不同的URL
我的項目是關於一所學校,教師類型的用戶在數據庫中有username
和password
屬性。用戶名由t
後跟個人識別號碼組成,例如t48945110
。另外,教師有一個布爾屬性來表明他們哪一個是校長(只有一個)。
是我的項目中的安全設置如下:
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
)的教師)訪問時,我有。我希望這位老師能夠訪問另一個用戶名,但不能將其保存在數據庫中,只需更改主要字母,然後在認證中查找老師的普通用戶名,並檢查導演是否將其重定向到/ admin
而不是/teacher
。例如,學校的負責人可以通過用戶名t48945110訪問他的個人區域作爲教師,也可以用用戶名d48945110
訪問學校的管理區域。
這個想法並不是創建兩個不同的登錄表單,而是訪問應用程序的所有用戶(學生,教師,導演......)。
我不知道它是否可以通過事件偵聽器或其他方式完成。感謝您的幫助。
這似乎對我來說過於複雜。用戶名不應該對特定用戶具有的角色有任何指示。爲什麼沒有一個位於admin /的管理界面,並且只需通過ACL爲老師限制訪問權限? – Atan
你好@Atan,謝謝你的回覆。在這種情況下,要訪問管理員/教師必須先訪問私人區域,然後添加一個選項以打開管理部分,對嗎?這是我的主要想法,但我不確定是否有任何方法讓教師獨立訪問每個部分,而不使用兩種不同的形式,以便他可以這樣做。 – Joseph
不,我的意思是使用單一登錄表單,並將每個用戶(學生,老師,導演)重定向到admin /。然後使用ACL規則根據角色限制用戶在管理面板中的訪問權限。例如,導演有兩個角色:ROLE_TEACHER和ROLE_ADMIN。教師只有ROLE_TEACHER。 – Atan