結論
重要な点
- 1 明確な命名をする
- 2 柔軟性と拡張性を持たせる
注意する点
- 1 予約語を避ける
- 2 意味が曖昧な名前を避ける
- 3 権限が混在している名前を避ける
重要な点
明確な命名をする
ロールや権限の名前はその機能を明確に示すべきです。
明確な命名をすると、新しい開発者がコードを理解しやすくなり、さらにバグを防ぐのに役立ちます。
柔軟性と拡張性を持たせる
プロジェクトの成長とともに、新しいロールや権限が必要になるかもしれません。
そのため、権限管理の設計は将来的な変更をしやすくする柔軟性と拡張性を持つべきだと思います。
以下、2点を踏まえた命名の例です。
名前を見ただけで、どういった権限を持ったロールなのか見当が付くと思います。
system_administrator
システム全体の管理と設定を担当。
このロール名から、システム全体の高い権限を持つことがわかります。
content_moderator
コンテンツや投稿の監視と管理を担当。
ユーザーが適切な行動を取るようにガイドする役割があります。
registered_user
登録済みの一般ユーザーで、プロフィールの編集や自分の投稿の作成・編集・削除などの基本的な操作が可能。
guest_user
未登録の訪問者で、閲覧のみが可能で投稿などの操作はできない。
product_manager
製品の追加、編集、削除など、製品に関連する操作を担当。
order_processor
注文の処理、追跡、更新など、注文に関連する操作を担当。
注意する点
予約語を避ける
プログラミング言語やフレームワークで予約語として定義されている単語を、権限名に使わないようにしましょう。
これらを権限名として使うと意図しない動作やエラーを引き起こす可能性があります。
意味が曖昧な名前を避ける
例えば、”can_do_something”や”has_permission”のように、何を指しているのかが不明確な名前は適切ではありません。
これらの名前では、具体的にどのような行動が許可されているのかがわかりません。
権限が混在している名前を避ける
“can_edit_and_delete_posts”のように、複数の権限レベルが混在している名前は適切ではありません。
権限名はできるだけ単一の権限レベルを指すようにしましょう。
権限が追加や変更されたときに、名前の変更や新たな権限の作成を余儀なくされる可能性があります。
以下は、注意する点を踏まえた悪い例です。
all_access
全てのアクセス権限を持つことを示していると解釈できますが、具体的にどのリソースに対するアクセス権限なのかが不明確です。
do_something
非常に曖昧で、何を「する」ことができるのかがまったく明確ではありません。
editor_manager
編集と管理の二つの異なるロールが混在しています。
将来的に、これらのロールを個別に持たせたいと思ったときに、新しいロールを作成する必要があります。
user
これは一般的なロール名でよく使用されますが、システム内で何を指しているのか具体的ではありません。
superuser
システム上で非常に強力な権限を持っていることを示すことが多いです。
しかし、この名前からはその権限の範囲や制限が不明確であり、悪用の危険性があります。
userのように一般的に使われるロールでも、よく考えてみると具体性がなく意図しないバグの引き金となりそうですね。
まとめ
今回書いたのは以下に考え方に基づく一例で、権限やロールの命名については要件によって基準が変わると思います。
「重要な点」を押さえた命名をするに越したことはありませんが、それぞれのプロジェクトにあったロール名をつけましょう。
重要な点
- 1 明確な命名をする
- 2 柔軟性と拡張性を持たせる
注意する点
- 1 予約語を避ける
- 2 意味が曖昧な名前を避ける
- 3 権限が混在している名前を避ける