ホームページ バックエンド開発 Python チュートリアル Django ユーザー認証システム (3) グループと権限

Django ユーザー認証システム (3) グループと権限

Dec 23, 2016 pm 05:42 PM

Django の権限システムは非常にシンプルで、ユーザーまたはグループ内のユーザーに権限を付与できます。

Django 管理バックエンドはこの権限システムを使用しますが、独自のコードでも使用できます。ユーザーは「

」の各グループに付与されるすべての権限を取得します。 Ermissions = Models.manytomanyField (Permission,

Verbose_name = _ ('ユーザー権限'),blank=True,

help_text=_('これに対する特定の権限user.'),

relationship_name="user_set", relationship_query_name="user")


他の django モデルと同様にアクセスできます:

myuser.groups = [group_list]
myuser.groups.add(group, group, ...)
myuser.groups.remove(グループ, グループ, ...)
myuser.groups.clear()
myuser.user_permissions = [permission_list]

myuser.user_permissions.add(許可, 許可, ...)

myuser.user_permissions.remove(permission, Permission, ...)

myuser.user_permissions.clear()



Permissions

権限を確立するには、権限モデルのインスタンスを作成します。

@python_2_unicode_compatibility
class Permission(models.Model):
"""

権限システムは、特定の

ユーザーおよびユーザーのグループに権限を割り当てる方法を提供します。

権限システムは、Django 管理サイトによって使用されますですが、独自のコードでも役立つ可能性があります

。Django 管理サイトでは、次のようなアクセス許可が使用されます。


- 「追加」アクセス許可は、ユーザーが「追加」フォームを表示したり、オブジェクトを追加したりする機能を制限します。
- 「 「変更」権限は、変更
リストの表示、「変更」フォームの表示、オブジェクトの変更を行うユーザーの機能を制限します。
- 「削除」権限は、オブジェクトを削除する機能を制限します。

権限はオブジェクトの種類ごとにグローバルに設定されます。特定のオブジェクト
インスタンスごとではなく、「メアリーはニュース記事を変更するかもしれない」と言うのは可能ですが、「メアリーはニュース記事を変更するかもしれないが、彼女が自分で作成した
ものだけを変更するかもしれない」または「メアリーはニュース記事のみを変更するかもしれない」と言うのは
現時点では不可能です。
特定のステータスまたは公開日を持つニュース記事を変更します。"

3 つの基本的な権限 (追加、変更、削除) が、Django モデルごとに自動的に
作成されます。
"""
name = models.CharField(_( 'name '), max_length=255)
content_type = models.ForeignKey(ContentType)
コードネーム = models.CharField(_('codename'), max_length=100)
オブジェクト = PermissionManager()

class Meta:
verbose_name = _( '許可')
冗長名複数 = _('許可')
unique_together = (('content_type', 'codename'),)
順序付け = ('content_type__app_label', 'content_type__model',
'codename')

def __str__(self):
through ’ s ’ through ’s ’s ’ s ‐‐‐‐ out to 6.text_type(self.content_type),
)

def Natural_key(self):
return (self.コードネーム、) + self.content_type.natural_key()
Natural_key.dependency = ['contenttypes.contenttype']


fields フィールド

name: 必須。 50 文字以下、例: 「Can Vote」

content_type: 必須。アプリケーション内の各モデルのレコードが含まれる django_content_type データベース テーブルへの参照。

コード名: 必須、100 文字以下、例: 「can_vote」。

モデルの権限を作成したい場合:

from django.db import models

class Vote(models.Model):
...

class Meta:
Permissions = (("can_vote", "Can投票 "),)

このモデルがアプリケーション foo にある場合、権限は 'foo.can_vote' として表現され、ユーザーが権限 myuser.has_perm('foo.can_vote') を持っているかどうかを確認します

デフォルトの権限

django.contrib.auth は INSTALLED_APPS で構成されており、インストールされているアプリケーションの Django モデルごとに 3 つのデフォルトのアクセス許可 (追加、変更、削除) が確実に作成されます。

これらの権限は、manage.py merge を初めて実行するときに作成されます (1.7 より前の syncdb)。その時点で、すべてのモデルに権限が確立されます。これ以降に作成される新しいモデルには、manage.py merge が再度実行されるときに作成されるこれらのデフォルトのアクセス許可が設定されます。これらの権限は、管理管理インターフェイスでの作成、削除、および変更の動作に対応します。

モデル Bar を持つアプリケーション foo があると仮定すると、次のメソッドを使用して基本的な権限をテストできます:

add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar' )
delete: user.has_perm('foo.delete_bar')
Permissionモデル(Permissionモデル)は、通常、直接使用されません。

グループ

グループはモデルとしても存在します:

@python_2_unicode_compatibility
class Group(models.Model):
"""
グループは、ユーザーを分類して権限や他のラベルをユーザーに適用する一般的な方法です。ユーザーは、任意の数の
グループに所属できます。

グループ内のユーザーには、その
グループに付与されているすべての権限が自動的に付与されます。

グループは、権限を超えてユーザーを分類するのに便利な方法です。
いくつかのラベルや拡張機能をそれらに適用すると、
グループ「特別ユーザー」を作成し、それらのユーザーに特別な操作を
するコードを作成できます。サイトのメンバー限定部分、またはメンバー限定の電子メール
メッセージを送信します。
"""
name = models.CharField(_ ('name'), max_length=80, unique=True)
権限 = models.ManyToManyField (許可,
)verbose_name=_('permissions'),blank=True)

オブジェクト = GroupManager()

class Meta:
Verbose_name = _ ('グループ')
Verbose_name_plural = _ ('グループ')

DEF __Str __ (Self):
Return Self.name

Def Nature_key (Sel):
Return (SELN f.Name,) フェーズフィールドフィールド:

name: 必須、80 文字以下、例: 'Awesome Users' 。

permissions:ManyToManyFieldからPermissionへ

group.permissions = [permission_list]

group.permissions.add(permission, 許可, ...)

group.permissions.remove(permission, 許可, ...)

group.permissions .clear()

プログラムによる権限の作成

モデルメタを使用して権限を作成することに加えて、コードを使用して直接作成することもできます。

たとえば、myapp アプリケーションで BlogPost モデルの can_publish 権限を作成します。

from myapp.models import BlogPost

from django.contrib.auth.models import Group, Permission

from django.contrib.contenttypes.models import ContentType content_type = contentType.objects.get_for_model(blogpost)

permission= permission.objeds.create(codename = 'can_publish'、

name = 'can publise "、

content_type = content_type) user_permissions 属性を使用してユーザー オブジェクトを指定するか、permission 属性を使用してグループに割り当てます。


権限のキャッシュ

ユーザーに新しい権限が与えられた場合、すぐにチェックすると、ユーザーの権限はキャッシュされません。最も簡単な方法は、User オブジェクトを再フェッチすることです。

from django.contrib.auth.models import Permission, User
from django.shortcuts import get_object_or_404

def user_gains_perms(request, user_id):
user = get_object_or_404(User, pk=user_id)
#Permission チェックは現在の権限をキャッシュしますSet
user.has_perm('myapp.change_bar')

Permission = Permission.objects.get(codename='change_bar')
user.user_permissions.add(permission)

# 権限キャッシュセットを確認します
user.has_perm(' myapp.change_bar') # False

# 新しいインスタンスをリクエストします
user = get_object_or_404(User, pk=user_id)

# 権限キャッシュはデータベースから再設定されます
user.has_perm('myapp.change_bar') # True

..

Permissiondecorator

permission_required(perm[,login_url=None, raise_Exception=False])

django.contrib.auth の @login_required()

と同様に、ユーザーが特定の権限を持っているかどうかを確認します。デコレータインポート許可_required

@permission_required('polls.can_vote',login_url='/loginpage/')
def my_view(request):
...

テンプレート内の権限

ユーザーの権限はテンプレート変数に保存されます{ { perms }} は django.contrib.auth.context_processors.PermWrapper インスタンスです。

{{ perms.foo }}

上記の 1 つの属性は User.has_module_perms のプロキシです。ユーザーが foo で何らかの権限を持っている場合、それは True

{{ perms.foo.can_vote }}

ユーザーが foo.can_vote 権限を持っている場合、上記の 2 レベルの属性クエリは User.has_perm のプロキシになります。 、 それは本当です 。

例:

{% if perms.foo %}
で何かをする権限があります。 else %}

foo アプリで何もする権限がありません。 </P> PHP 中国語 Web サイト (www.php.cn) に注意してください。




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Dec 01, 2023 pm 02:25 PM

Django のバージョンを確認する手順: 1. ターミナルまたはコマンド プロンプト ウィンドウを開きます; 2. Django がインストールされていることを確認します Django がインストールされていない場合は、パッケージ管理ツールを使用してインストールし、 pip install django コマンドを入力します。 3. インストールが完了したら、python -m django --version を使用して Django のバージョンを確認できます。

Django vs. Flask: Python Web フレームワークの比較分析 Django vs. Flask: Python Web フレームワークの比較分析 Jan 19, 2024 am 08:36 AM

Django と Flask はどちらも Python Web フレームワークのリーダーであり、それぞれに独自の利点と適用可能なシナリオがあります。この記事では、これら 2 つのフレームワークを比較分析し、具体的なコード例を示します。開発の概要 Django はフル機能の Web フレームワークであり、その主な目的は、複雑な Web アプリケーションを迅速に開発することです。 Django は、ORM (オブジェクト リレーショナル マッピング)、フォーム、認証、管理バックエンドなどの多くの組み込み機能を提供します。これらの機能により、Django は大規模なデータを処理できるようになります。

Django フレームワークの長所と短所: 知っておくべきことすべて Django フレームワークの長所と短所: 知っておくべきことすべて Jan 19, 2024 am 09:09 AM

Django は、Web 開発ライフサイクルのあらゆる側面をカバーする完全な開発フレームワークです。現在、このフレームワークは世界中で最も人気のある Web フレームワークの 1 つです。 Django を使用して独自の Web アプリケーションを構築する場合は、Django フレームワークの長所と短所を理解する必要があります。具体的なコード例も含め、知っておくべきことはすべてここにあります。 Django の利点: 1. 迅速な開発 - Django は Web アプリケーションを迅速に開発できます。豊富なライブラリと内部を提供します。

Djangoのバージョンを確認する方法 Djangoのバージョンを確認する方法 Nov 30, 2023 pm 03:08 PM

Django のバージョンを確認する方法: 1. コマンド ラインで確認するには、ターミナルまたはコマンド ライン ウィンドウで「python -m django --version」コマンドを入力します。 2. Python 対話型環境で確認するには、「import django」と入力します。 print(django.get_version())" code; 3. Django プロジェクトの設定ファイルを確認し、インストールされているアプリケーション情報を含む INSTALLED_APPS という名前のリストを見つけます。

Django のバージョンの違いは何ですか? Django のバージョンの違いは何ですか? Nov 20, 2023 pm 04:33 PM

違いは次のとおりです。 1. Django 1.x シリーズ: これは、バージョン 1.0、1.1、1.2、1.3、1.4、1.5、1.6、1.7、1.8、および 1.9 を含む、Django の初期バージョンです。これらのバージョンは主に基本的な Web 開発機能を提供します; 2. Django 2.x シリーズ: これは、2.0、2.1、2.2 およびその他のバージョンを含む Django の中期バージョンです; 3. Django 3.x シリーズ: これは最新バージョンですDjango シリーズ。バージョン 3.0、3 などを含む。

Django バージョンをアップグレードする方法: 手順と考慮事項 Django バージョンをアップグレードする方法: 手順と考慮事項 Jan 19, 2024 am 10:16 AM

Django バージョンをアップグレードする方法: 手順と考慮事項、必要な特定のコード例 はじめに: Django は、より優れたパフォーマンスとより多くの機能を提供するために継続的に更新およびアップグレードされる強力な Python Web フレームワークです。ただし、古いバージョンの Django を使用している開発者にとって、Django のアップグレードはいくつかの課題に直面する可能性があります。この記事では、Djangoのバージョンアップの手順や注意点、具体的なコード例を紹介します。 1. Djan をアップグレードする前にプロジェクト ファイルをバックアップします。

Django はフロントエンドですか、それともバックエンドですか? Django はフロントエンドですか、それともバックエンドですか? Nov 21, 2023 pm 02:36 PM

バックエンドは django です。詳細: Django は主にバックエンド フレームワークですが、フロントエンド開発と密接に関連しています。 Django のテンプレート エンジン、静的ファイル管理、RESTful API などの機能を通じて、フロントエンド開発者はバックエンド開発者と協力して、強力でスケーラブルな Web アプリケーションを構築できます。

Django、Flask、FastAPI: 初心者に適したフレームワークはどれですか? Django、Flask、FastAPI: 初心者に適したフレームワークはどれですか? Sep 27, 2023 pm 09:06 PM

Django、Flask、FastAPI: 初心者に適したフレームワークはどれですか?はじめに: Web アプリケーション開発の分野では、優れた Python フレームワークが数多くあります。この記事では、最も人気のある 3 つのフレームワーク、Django、Flask、および FastAPI に焦点を当てます。それらの機能を評価し、初心者が使用するのに最適なフレームワークについて説明します。同時に、初心者がこれらのフレームワークをよりよく理解できるように、いくつかの具体的なコード例も提供します。 1.ジャンゴ:ジャンゴ

See all articles