我瞭解基本的用戶資料。我知道身份驗證,登錄,創建帳戶等,但現在我想工作的組和權限。如何使用Django組和權限?
django groups/permissions的文檔在哪裏?這不是:http://docs.djangoproject.com/en/dev/topics/auth/
我瞭解基本的用戶資料。我知道身份驗證,登錄,創建帳戶等,但現在我想工作的組和權限。如何使用Django組和權限?
django groups/permissions的文檔在哪裏?這不是:http://docs.djangoproject.com/en/dev/topics/auth/
我想你需要問的第一個問題是你需要什麼權限以及什麼類型。我的意思是你想要模型還是對象級別。爲了弄清楚差異,說你有一輛車。如果你想授予所有車輛的權限,那麼模型級別是適當的,但如果你想在每輛車的基礎上給予權限,你需要對象級別。您可能需要兩者,而這不是我們將要看到的問題。
對於模型權限,Django爲您處理這些...大部分。對於每個模型,Django都將以'appname.permissionname_modelname'的形式創建權限。如果您的汽車模型中有一個名爲'drivers'的應用,那麼其中一個權限就是'drivers.delete_car'。 Django自動創建的權限將是創建,更改和刪除。由於一些奇怪的原因,他們決定不包含來自CRUD的讀取權限,您將不得不自己做這件事。請注意,由於某種原因,Django決定將CRUD的「更新」更改爲「更改」。要添加更多的權限模型,說讀權限,您可以使用元類:
class Car(models.Model):
# model stuff here
class Meta:
permissions = (
("read_car", "Can read Car"),
)
注意,權限是一組元組,其中元組項目是如上所述和該權限的描述許可。你不必遵循permname_modelname約定,但我通常堅持它。
最後,檢查權限,你可以使用has_perm:
obj.has_perm('drivers.read_car')
這裏的obj或者是一個用戶或組的實例。我認爲這是簡單的寫了這樣的功能:
def has_model_permissions(entity, model, perms, app):
for p in perms:
if not entity.has_perm("%s.%s_%s" % (app, p, model.__name__)):
return False
return True
如果實體是檢查(組或用戶)權限的對象,模型是模型的實例,燙髮是權限字符串列表來檢查(例如['read','change']),app是作爲字符串的應用程序名稱。做同樣的支票has_perm上面你會打電話來是這樣的:
result = has_model_permissions(myuser, mycar, ['read'], 'drivers')
如果您需要使用對象或行權限(它們意味着同樣的事情),那麼Django的不能真正幫助你本身。好的是你可以同時使用模型和對象權限。如果你想獲得對象權限,你將不得不write your own(如果使用1.2+)或找到其他人寫的項目,我喜歡從washingtontimes的django-objectpermissions。
這是一個很好的權限答案,但幾乎沒有觸及組,以及它們如何在Django中工作? – Simon 2013-07-22 22:53:09