Конфигурация управления доступом

Обзор параметров конфигурации Nette Security.

Если вы используете не весь фреймворк, а только эту библиотеку, прочитайте, как загрузить конфигурацию.

В конфигурации можно определить список пользователей и тем самым создать простой аутентификатор (Nette\Security\SimpleAuthenticator). Поскольку пароли в конфигурации указываются открытым текстом, такое решение годится только для целей проверки.

security:
	# показывать панель пользователя в Tracy Bar?
	debugger: ...  # (bool) по умолчанию auto (включено, когда активна Tracy)

	users:
		# имя: пароль
		johndoe: 'secret123'

		# имя, пароль, роли и другие данные, доступные в личности
		janedoe:
			password: 'secret123'
			roles: [admin]
			data: ...

Вместо пароля открытым текстом можно указать его хеш, он распознаётся автоматически. Поскольку и пароли, и хеши могут содержать символы, имеющие в NEON особое значение, мы рекомендуем всегда заключать их в кавычки.

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

Кроме того, можно определить роли и ресурсы и тем самым создать основу для авторизатора (Nette\Security\Permission):

security:
	roles:
		guest:
		registered: [guest]  # registered наследуется от guest
		admin: [registered]  # а admin наследуется от registered

	resources:
		article:
		comment: [article]   # ресурс наследуется от article
		poll:

И наконец правила доступа. Каждое правило – тройка из роли, ресурса и права; опущенный или null элемент означает “все”, а простая строка разрешает или запрещает роли всё.

security:
	rules:
		allow:
			- [guest, article, view]              # роль, ресурс, право
			- [registered, comment, [add, edit]]  # список означает несколько значений
			- [admin]                             # admin может всё
		deny:
			- [banned, comment, add]

Если вам нужны более сложные правила, например условия, проверяемые callback'ом (утверждения), зарегистрируйте собственный авторизатор, как показано в главе Авторизация. Когда вы это сделаете, определяйте роли, ресурсы и правила в этом авторизаторе, а не здесь, иначе у вас получились бы два конкурирующих сервиса Nette\Security\Permission.

Хранилище пользователя

Вы можете настроить, как хранить сведения о вошедшем пользователе:

security:
	authentication:
		# время бездействия, после которого пользователь будет разлогинен
		expiration: 30 minutes        # (string) по умолчанию не задано

		# где хранить сведения о вошедшем пользователе
		storage: session              # (session|cookie) по умолчанию session

		# сохранять личность доступной после выхода и истечения срока
		persistIdentity: true         # (bool) по умолчанию true

Если вы выберете в качестве хранилища cookie, можно задать ещё и такие параметры:

security:
	authentication:
		# имя cookie
		cookieName: userId            # (string) по умолчанию userid

		# домены, которые могут принимать cookie
		cookieDomain: 'example.com'   # (string|domain)

		# ограничение доступа с другого источника
		cookieSamesite: None          # (Strict|Lax|None) по умолчанию Lax

Сервисы DI

Эти сервисы добавляются в DI-контейнер:

Имя Тип Описание
security.authenticator Nette\Security\Authenticator аутентификатор
security.authorizator Nette\Security\Authorizator авторизатор
security.passwords Nette\Security\Passwords хеширование паролей
security.user Nette\Security\User текущий пользователь
security.userStorage Nette\Security\UserStorage хранилище
версия: 4.x