ระบบควบคุมในการกระจายและเข้าถึงข่าวสาร การประกาศ

วันเสาร์ที่ 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/

ไม่มีความคิดเห็น :

แสดงความคิดเห็น