アクセス制御の設定
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:
そして最後にアクセスの決まりです。それぞれの決まりはロール、資源、権限の
3 つ組です。省いた項目や null
の項目は「すべて」を意味し、裸の文字列はそのロールにすべてを許すか禁じます。
security:
rules:
allow:
- [guest, article, view] # ロール、資源、権限
- [registered, comment, [add, edit]] # 並びは複数の値を意味します
- [admin] # admin は何でもできます
deny:
- [banned, comment, add]
コールバックで確かめる条件(アサーション)のような、もっと込み入った決まりが必要なら、認可で示すように自分の認可器を登録してください。そうする場合は、ロール、資源、決まりをここではなくその認可器で定めてください。さもないと
Nette\Security\Permission のサービスが 2 つ競い合うことになります。
利用者の保管場所
ログインした利用者の情報をどう保管するかを設定できます。
security:
authentication:
# 利用者がログアウトさせられるまでの無操作の時間
expiration: 30 minutes # (string) 既定では未設定
# ログインした利用者の情報をどこに保管するか
storage: session # (session|cookie) 既定は session
# ログアウトと期限切れのあとも身元を残しますか
persistIdentity: true # (bool) 既定は true
保管場所に cookie を選んだ場合は、次のオプションも設定できます。
security:
authentication:
# クッキーの名前
cookieName: userId # (string) 既定は userid
# クッキーを受け取れるドメイン
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 | 保管場所 |