許可權管理 RBAC簡單實現

2021-10-14 13:10:50 字數 4369 閱讀 1782

# 角色表

class

role

(models.model)

: name = models.charfield(

'角色名稱'

, max_length=

32, unique=

true

)class

meta

: db_table =

'tb_role'

# abstractuser是django使用者元件裡的使用者模型類,繼承以後對原來的模型類進行改寫

# 使用者表

class

user

(abstractuser)

: phone = models.charfield(

'手機號'

, max_length=

20, null=

true

) img = models.imagefield(max_length=

256, null=

true

) nick_name = models.charfield(

'暱稱'

, max_length=

20, null=

true

) address = models.charfield(

'位址'

, max_length=

255, null=

true

) email = models.charfield(

'郵箱'

, max_length=

255, null=

true

) vip = models.foreignkey(vip, on_delete=models.set_null, default=

none

, null=

true

) vip_expiration = models.datefield(

'vip到期時間'

, blank=

true

, default=

none

, null=

true

) roles = models.manytomanyfield(role, related_name=

'users'

)class

meta

: db_table =

'tb_user'

def__str__

(self)

:return self.username

# 許可權表/訪問介面表

class

urlinfo

(models.model)

: url = models.charfield(

'url'

, max_length=

20, null=

true

) desc = models.charfield(

'描述'

, max_length=

128, null=

true

) roles = models.manytomanyfield(role, related_name=

'urlsinfo'

)class

meta

: db_table =

'tb_urls'

def__str__

(self)

:return self.url

from rest_framework.permissions import basepermission

# 方法一

class

sylpermission

(basepermission)

: message =

'當前使用者沒有該許可權進行訪問'

defhas_permission

(self, request, view)

: uid = request.user.

id# 獲取當前使用者id

user_obj = user.objects.

filter(id

=uid)

.first(

)# 查詢該使用者 擁有的 所有角色

user_role_obj = user_obj.roles.

all(

)print

("該使用者的所有角色:"

, user_role_obj)

url = request.path_info

method = request.method

print

(url + method)

# 查詢 當前訪問的路徑

url_obj = urlinfo.objects.

filter

(url=url + method)

.first(

)print

("當前路由對應的url物件"

, url_obj)

if url_obj:

# 如果存在路徑資訊, 獲取該路徑對應的 所有角色

url_role_obj = user_obj.roles.

all(

)else

:# 不存在,即沒有許可權

return

false

# 迴圈遍歷該使用者的所有角色

for i in user_role_obj:

# 判斷該使用者擁有的角色 是否 存在當前路徑對應的角色中

if i in url_role_obj:

return

true

return

false

# 方法二

class

sylpermission2

(basepermission)

: message =

'當前使用者沒有該許可權進行訪問'

defhas_permission

(self, request, view)

: uid = request.user.

id# 獲取當前使用者id

user_obj = user.objects.

filter(id

=uid)

.first(

)# 查詢該使用者 擁有的 所有角色

user_role_obj = user_obj.roles.

all(

)print

("該使用者的所有角色:"

, user_role_obj)

url = request.path_info # 獲取當前訪問的路徑

method = request.method # 獲取當前訪問的路徑的方法

request_url = url + method

print

(request_url)

# 迴圈遍歷該使用者擁有的角色

for i in user_role_obj:

print

(i)# 通過當前角色 獲取當前角色 i 可以訪問的所有路徑url資訊

url_obj = i.urlsinfo.

all(

)# 迴圈遍歷 所有路徑

for j in url_obj:

# 判斷當前訪問的路徑 是否在 路徑資訊中

if request_url == j.url:

return

true

return

false

from rest_framework.viewsets import modelviewset

class

coursetypeview

(modelviewset)

: queryset = models.coursetype.objects.

all(

) serializer_class = serializers.coursertypeser

permission_classes =

[sylpermission2]

許可權管理 RBAC簡單實現

角色表 class role models.model name models.charfield 角色名稱 max length 32,unique true class meta db table tb role abstractuser是django使用者元件裡的使用者模型類,繼承以後對原來的...

許可權管理 RBAC簡單實現

from django.db import models from django.contrib.auth.models import abstractuser from utils.mybasemodel import base create your models here.角色表 class ...

許可權管理 RBAC簡單實現 2

角色表 class role models.model name models.charfield 角色名稱 max length 32,unique true class meta db table tb role abstractuser是django使用者元件裡的使用者模型類,繼承以後對原來的...