我正在將權限功能實現到我的webapp中。客戶指定的要求是用戶可以根據他們是什麼類型的用戶來執行某些操作。用戶的種類基於user_type:user_role
的組合來定義。這是模型:Django:從user_type派生權限
class User(AbstractUser):
usertype = models.IntegerField(choices=UserType.CHOICES, default=UserType.BUYER_USER)
role = models.IntegerField(choices=UserRole.CHOICES, default=UserRole.NORMAL_USER)
例如,我們可以有:
adviser:regular
:可以manager_orders
adviser:admin
:可以做一個adviser:regular
做什麼,也manage_advisers
(這是沒有Django的admin
,但)
(還有更多user_type:user_role
)
這似乎與django permission system,這是基於什麼權限的用戶具有,而不是什麼樣的用戶是衝突。
也就是說,當使用django權限系統時,我需要定義所有可能的權限並將這些權限分配給受影響的用戶。相反,用我正在計劃的方法,我需要從user_type:user_role
派生的許可。
在這種情況下使用django權限系統有意義嗎?我如何獲得user_type:user_role
的許可
那麼,如果可能的話,爲什麼不使用django'groups'概念開始呢?您可以創建一個組併爲該組分配一定的權限,然後組中的所有用戶都將繼承該權限。在這種情況下,可以通過檢查他/她所屬的組來回答「是什麼類型的用戶」這個問題。 –
@尚王:謝謝,但仍不清楚。我仍然可能(有可能)衝突的信息:一方面是user_type:user_role,另一方面是用戶所屬的組。由於該組是決定性參數,因此user_type:user_role不相關。這正是我想避免的:我想直接從user_type:user_role派生權限,而不是從任何其他設置(權限或組)中獲得權限 – dangonfast
我的建議並不真正適用於您的模型,它是一種替代方法這比django更適合你的原始設計。我真的不知道你怎麼能用自己的方式來使用權限系統(但肯定是自定義的),但是你可能會發現使用group來表示'usertype'和'role'更容易。 –