Konfiguracja kontroli dostępu

Przegląd opcji konfiguracyjnych dla Nette Security.

Jeśli nie używasz całego frameworku, tylko tej biblioteki, przeczytaj, jak wczytać konfigurację.

W konfiguracji możesz zdefiniować listę użytkowników i utworzyć w ten sposób prosty authenticator (Nette\Security\SimpleAuthenticator). Ponieważ hasła podawane są w konfiguracji jawnym tekstem, to rozwiązanie nadaje się wyłącznie do celów testowych.

security:
	# pokazać panel użytkownika w Tracy Bar?
	debugger: ...  # (bool) domyślnie auto (włączone, gdy Tracy jest aktywne)

	users:
		# nazwa: hasło
		johndoe: 'secret123'

		# nazwa, hasło, role i inne dane dostępne w tożsamości
		janedoe:
			password: 'secret123'
			roles: [admin]
			data: ...

Zamiast hasła jawnym tekstem możesz podać jego hash; jest rozpoznawany automatycznie. Ponieważ zarówno hasła, jak i hashe mogą zawierać znaki o specjalnym znaczeniu w NEON, zalecamy zawsze zamykać je w cudzysłowach.

security:
	users:
		johndoe: '$2y$12$8aeofxuRALu4iNeaBHyLpuxf3xxKQdEreSaNLkQUiIfUmAv6cRHLa'

Poza tym możesz zdefiniować role i zasoby, tworząc podstawę dla autoryzatora (Nette\Security\Permission):

security:
	roles:
		guest:
		registered: [guest]  # registered dziedziczy po guest
		admin: [registered]  # a admin dziedziczy po registered

	resources:
		article:
		comment: [article]   # zasób dziedziczy po article
		poll:

I wreszcie reguły dostępu. Każda reguła to trójka roli, zasobu i uprawnienia; pominięta albo nullowa pozycja oznacza “wszystko”, a sam ciąg pozwala albo zabrania roli wszystkiego.

security:
	rules:
		allow:
			- [guest, article, view]              # rola, zasób, uprawnienie
			- [registered, comment, [add, edit]]  # lista oznacza wiele wartości
			- [admin]                             # admin może wszystko
		deny:
			- [banned, comment, add]

Jeśli potrzebujesz bardziej złożonych reguł, na przykład warunków weryfikowanych callbackiem (asercji), zarejestruj własny autoryzator, jak pokazuje Autoryzacja. Gdy to zrobisz, definiuj role, zasoby i reguły w tym autoryzatorze, a nie tutaj, inaczej skończysz z dwiema konkurującymi usługami Nette\Security\Permission.

Magazyn użytkownika

Możesz skonfigurować, jak przechowywać informację o zalogowanym użytkowniku:

security:
	authentication:
		# czas nieaktywności, po którym użytkownik zostanie wylogowany
		expiration: 30 minutes        # (string) domyślnie nieustawione

		# gdzie przechowywać informację o zalogowanym użytkowniku
		storage: session              # (session|cookie) domyślnie session

		# zachować tożsamość dostępną po wylogowaniu i wygaśnięciu
		persistIdentity: true         # (bool) domyślnie true

Jeśli jako magazyn wybierzesz cookie, możesz ustawić także te opcje:

security:
	authentication:
		# nazwa cookie
		cookieName: userId            # (string) domyślnie userid

		# domeny, które mogą przyjąć cookie
		cookieDomain: 'example.com'   # (string|domain)

		# ograniczenie przy dostępie cross-origin
		cookieSamesite: None          # (Strict|Lax|None) domyślnie Lax

Usługi DI

Do kontenera DI dodawane są te usługi:

Nazwa Typ Opis
security.authenticator Nette\Security\Authenticator authenticator
security.authorizator Nette\Security\Authorizator autoryzator
security.passwords Nette\Security\Passwords hashowanie haseł
security.user Nette\Security\User bieżący użytkownik
security.userStorage Nette\Security\UserStorage magazyn
wersja: 4.x