Конфигурация управления доступом
Обзор параметров конфигурации 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 | хранилище |