วันเสาร์ที่ 9 กรกฎาคม พ.ศ. 2559
django permission สำหรับ User
django ให้เรากำหนด permission ของบัญชีผู้ใช้งานได้ เมื่อเราสร้างเว็บแอปขึ้นมาแล้วต้องการจำกัดสิทธิของผู้ใช้งานในแต่ละประเภท เราทำได้โดยเข้าไปในหน้า admin แล้วกำหนด permission ให้แก่ผู้ใช้แต่ละคน แต่ว่าเรามีอีกวิธีในการเพิ่ม ลบ และตรวจ permission ของผู้ใช้โดยที่เรากำหนด permission ของผู้ใช้ในแต่ละฟังก์ชันใน views ได้เลย ดังตัวอย่างต่อไปนี้สร้าง model ที่มี class meta พร้อมสร้าง permission ขึ้นมา
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(null=True, blank=True, max_length=255)
class Meta:
permissions = (
('permission_code', 'Friendly permission description'),
)
def __str__(self):
return "%s's profile" % self.user
ในการสร้าง object ของ model จากโค้ดด้านบน ตอนแรกจะยังไม่มี permission ให้เราเพิ่ม permission ดังโค้ดด้านล่างนี้
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)
# any permission check will cache the current set of permissions
user.has_perm('myapp.change_bar')
permission = Permission.objects.get(codename='change_bar')
user.user_permissions.add(permission)
# Checking the cached permission set
user.has_perm('myapp.change_bar') # False
# Request new instance of User
# Be aware that user.refresh_from_db() won't clear the cache.
user = get_object_or_404(User, pk=user_id)
# Permission cache is repopulated from the database
user.has_perm('myapp.change_bar') # True
ในการใช้งานกับ views จะเป็นดังโค้ดด้านล่างนี้
@permission_required('control.permission_code')
def new(request):
somecode...
จากโค้ดด้านบนจะทำการตรวจสอบ permission ของผู้ใช้ก่อนจึงทำงานฟังก์ชั้นนี้ได้
ข้อมูลเพิ่มเติม https://docs.djangoproject.com/ja/1.9/topics/auth/default/
สมัครสมาชิก:
ส่งความคิดเห็น
(
Atom
)
ไม่มีความคิดเห็น :
แสดงความคิดเห็น