我需要允許管理員管理我網站上模型的權限。目前,組,用戶和權限在這方面做得很好。但是,我還需要允許管理員管理未經身份驗證的用戶(匿名用戶)的權限。文檔說匿名用戶的組總是空的,那麼我如何允許管理他們的權限?Django - 匿名用戶組
3
A
回答
4
向匿名用戶添加權限很奇怪。 Docs說:
Django的權限框架沒有地方爲匿名用戶存儲 權限。但是,它有一個基礎,即 允許自定義身份驗證後端爲匿名用戶指定授權。這對 可重複使用的應用程序的作者特別有用,他們可以將授權的所有問題委託給驗證後端,而不需要設置,例如控制 匿名訪問。
因此,您可以將權限設置爲anon yuser,但是使用自定義auth後端。 有時最好使用聲明權限檢查,使用與所需的權限的意見裝飾,如:(含匿名用戶)
@permission_required('somemodel.can_add')
def add_model(request):
或離開它不受限制的每一個人。或者一些自定義的權限檢查..
或者,如果你想擁有的權限,無論如何,你總是可以創建一個虛擬用戶,讓我們說「AnonUser」,給它的權限,然後檢查權限有類似:
if not user.is_authenticated():
dummy_user = User.objects.get(name="AnonUser")
if dummy_user.has_perm("somepermission"):
# bla bla bla
,但是這是我從來沒有使用..
0
我已經有一個自定義的後端提供一個匿名組(如@Tisho suggests),它可以很容易地從管理界面進行編輯。將添加到settings.py
(例如'appname.auth_backend.AnonymousPermissions'
)中。
請注意,在檢查權限之前(例如login_required
)需要登錄是很常見的情況,因此只能使用僅限權限進行檢查。
from django.contrib.auth.models import Group
class AnonymousPermissions(object):
def get_anonymous_permissions(self):
#largely from django.contrib.auth.backends
group, group_created = Group.objects.get_or_create(name='Anonymous')
perms = group.permissions.all()
perms = perms.values_list('content_type__app_label', 'codename').order_by()
perms = set("%s.%s" % (ct, name) for ct, name in perms)
return perms
def get_group_permissions(self, user_obj, obj=None):
if user_obj.is_anonymous:
perm_cache_name = '_anonymous_perm_cache'
if not hasattr(user_obj, perm_cache_name):
setattr(user_obj, perm_cache_name, self.get_anonymous_permissions())
return getattr(user_obj, perm_cache_name)
return set()
def get_all_permissions(self, user_obj, obj=None):
return self.get_group_permissions(user_obj, obj)
def has_perm(self, user_obj, perm, obj=None):
return perm in self.get_group_permissions(user_obj, obj)
相關問題
- 1. Django跟蹤匿名用戶
- 2. Django中的匿名用戶
- 3. 在django匿名用戶
- 4. 使用Django禁用匿名用戶cookie
- 5. Django啓用匿名用戶會話
- 6. Django註冊表單,匿名用戶?
- 7. 的Django/GAE匿名用戶數據
- 8. Django以匿名用戶身份登錄?
- 9. 爲django中的匿名用戶緩存
- 10. Django,request.user始終是匿名用戶
- 11. Django的保存模型匿名用戶
- 12. Django - python-social-auth:Facebook返回匿名用戶
- 13. Django的存儲匿名用戶數據
- 14. Firebase匿名用戶
- 15. 匿名用戶錯誤編輯
- 16. 的Hadoop名稱節點 - 用於用戶匿名的,你組
- 17. drupal - 處理匿名用戶
- 18. 重定向匿名用戶/
- 19. devise-rails的匿名用戶
- 20. 匿名用戶錯誤
- 21. 匿名用戶的OAuth
- 22. 保證用戶匿名
- 23. Firebase中的匿名用戶
- 24. Devise的匿名用戶?
- 25. 如何在Django上只爲匿名用戶使用緩存?
- 26. 只爲匿名用戶使用django片段緩存
- 27. 如何使用Django和tastypie註冊匿名用戶?
- 28. 始終匿名用戶使用Django的代碼時選擇render_to_response
- 29. 使用直線外殼匿名用戶匿名權限
- 30. 創建匿名django會話
虛擬用戶方法可能是我唯一的選擇,因爲我需要讓管理員從管理員管理anon perms。它確實感到噁心,但... – guywhoneedsahand
然後,它可能會更好地實現一個簡單的身份驗證後端,並強制匿名用戶與虛擬用戶登錄。完全禁用匿名用戶。 – Tisho
Perphaps你可以在中間件類中分配虛擬用戶? – blaze