# 角色表
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(
("該使用者的所有角色:"
, user_role_obj)
url = request.path_info
method = request.method
(url + method)
# 查詢 當前訪問的路徑
url_obj = urlinfo.objects.
filter
(url=url + method)
.first(
("當前路由對應的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(
("該使用者的所有角色:"
, user_role_obj)
url = request.path_info # 獲取當前訪問的路徑
method = request.method # 獲取當前訪問的路徑的方法
request_url = url + method
(request_url)
# 迴圈遍歷該使用者擁有的角色
for i in user_role_obj:
(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使用者元件裡的使用者模型類,繼承以後對原來的...