Django認可入門|認証と権限(Permission)の違いを初心者向けにやさしく解説
生徒
「Djangoを勉強していたら、認証と認可って言葉が出てきました。何が違うんですか?」
先生
「簡単に言うと、認証は『あなたは誰?』、認可は『何をしていい?』を決める仕組みです。」
生徒
「ログインできるかどうかと、操作できる内容が違うってことですか?」
先生
「その通りです。では、パソコンを触ったことがない人でも分かるように、順番に説明していきますね。」
1. Djangoとは?認可を学ぶ前の超基本
Django(ジャンゴ)は、Python(パイソン)というプログラミング言語で作られたWebアプリケーション用の仕組みです。 Webアプリとは、ブラウザで使うサービスのことです。会員登録があって、ログインして、できることが人によって違う。 こうした仕組みを作るときにDjangoはとても役立ちます。
Djangoには最初から「ユーザー管理」「ログイン」「権限管理」といった機能が用意されています。 その中で重要なのが「認証」と「認可」です。
2. 認証(Authentication)とは何か
認証とは、「この人は本当に登録された本人か?」を確認する仕組みです。 たとえば、家に入るときに鍵を使いますよね。その鍵が合えば中に入れます。 これと同じで、ユーザー名とパスワードが合っているかを確認するのが認証です。
Djangoでは、ログイン処理はすでに用意されています。初心者でも難しい処理を書かなくて済みます。
from django.contrib.auth import authenticate, login
user = authenticate(username="taro", password="password123")
if user is not None:
login(request, user)
上のコードは、「ユーザー名とパスワードが正しければログインさせる」という意味です。 authenticateは「本人確認」、loginは「ログイン状態にする」処理です。
3. 認可(Authorization)とは何か
認可とは、「この人は何をしていいのか」を決める仕組みです。 会社を例にすると、社員証で入館できるのが認証、会議室や社長室に入れるかが認可です。
Djangoの認可では「権限(Permission)」という考え方を使います。 権限とは、「この操作をしてよい」という許可証のようなものです。
4. DjangoのPermission(権限)の基本
Djangoでは、データを作る・見る・直す・消す、という基本操作ごとに権限が用意されています。 たとえば「記事を削除できる人」「記事を読むだけの人」といった違いです。
if request.user.has_perm("blog.delete_post"):
print("削除できます")
else:
print("削除できません")
has_permは「この権限を持っていますか?」と確認する命令です。 blog.delete_postは「ブログの記事を削除する権限」を表しています。
5. 認証と認可の違いをまとめて整理
ここで一度、認証と認可の違いを整理します。 認証は「ログインできるかどうか」、認可は「ログイン後に何ができるか」です。
Djangoでは、まず認証でユーザーを確認し、その後に認可で操作内容を制限します。 この順番がとても大切です。
6. ビューで認可を使う簡単な例
Djangoのビューとは、画面の処理を書く場所です。 ここで権限チェックをすると、不正な操作を防げます。
from django.http import HttpResponse
def secret_view(request):
if not request.user.is_authenticated:
return HttpResponse("ログインしてください")
if not request.user.has_perm("app.view_secret"):
return HttpResponse("権限がありません")
return HttpResponse("秘密の情報です")
is_authenticatedは「ログインしているか」を確認します。 そのあとで権限をチェックするのが基本の流れです。
7. テンプレートでの認可チェック
Djangoでは、画面の表示部分をテンプレートと呼びます。 テンプレートでも権限によって表示を変えることができます。
{% if perms.blog.add_post %}
<button>記事を追加</button>
{% endif %}
permsは「権限一覧」を意味します。 権限がある人だけにボタンを表示することで、操作ミスを防げます。
8. 初心者がつまずきやすいポイント
初心者がよく混乱するのは、「ログインできるのに操作できない」状態です。 これは認証は成功しているが、認可が足りないケースです。
Djangoでは、認証と認可がはっきり分かれているため、どちらの問題かを切り分けることが大切です。 まずログインできているか、次に権限があるか、この順で確認しましょう。