2016-11-25 28 views
0

我開發了一個django應用程序,該用戶根據資源級別權限註冊用戶並提供資源在此,我在模型和模板上使用django基本級權限,許可我在我的模型中設置權限元組,如下所示:如何通過使用請求用戶屬性獲取非超級用戶的用戶權限

class Model(AbstractUser): 
    group = models.ForeignKey(AppGroup) 
    class Meta: 
     permissions = (('view_app', 'user can view app'),) 

我在創建類似上面的模型之後遷移模型。

現在爲了權限,我從admin創建了一個組,幷包括所有應用程序的查看/更改/刪除權限,使用該組我在表單類中生成了一個下拉列表。現在,用戶(管理員)可以根據選定的權限創建其他用戶,並且在成功註冊後可以成功登錄並訪問所有資源的新用戶,但是當我試圖訪問用戶權限時,這是多對多關係,使用類似於

class UserListView(ListView): 
    def get_queryset(self): 
     print(self.request.user.user_permissions.all()) 
     return super(UserListView, self).get_queryset() 

當我列出我的看法,它給我的關係錯誤(500錯誤): enter image description here 關係views_list_user_permission不存在

現在,當我通過超級用戶訪問相同的觀點它給了我所有的權限,但從既不是超級用戶也不是員工的用戶那裏吐出上述錯誤。通過審查djancgo.contrib.auth.models PermissionMixin類代碼,它似乎對我來說user_permissions m2m字段只能由超級用戶訪問,但我對此表示懷疑。所以這就是我正在做的,並得到了問題,請糾正我,如果我把這個錯誤的方式

回答

1

超級用戶擁有所有授予的權限集。因此你可以看到所有的權限。但是,當創建一個新用戶時,他不會擁有任何權限設置,因此用戶和權限之間沒有任何關係,因此您會收到上述錯誤。

Note:- 

您可以檢查的使用

{{ perms }} 

對於一個特定的應用程序登錄的用戶內模板可用權限: -

{{ perms.app_name }} 

對於某一特定型號的 -

{{ perms.app_name.model_name }} 

假設你要訪問權授予特定權限的用戶到特定模型視圖可以使用許可所必需的裝飾是這樣的: -

from django.contrib.auth.decorators import permission_required 
@permission_required('polls.can_vote') 
def my_view(request): 
... 

現在這裏與許可can_vote的「民意調查」,用戶將被允許獲得准許。

對於更詳細的使用可以參考: -

Django documentation on permissions.

認證後端是負責用戶的權限。我猜你正在使用自己的自定義身份驗證後端。但是,如果您這樣做,則可能忘記導入ModelBackend。 from django.contrib.auth.backends import ModelBackend

現在確保該後端上註冊

class EmailBackend(ModelBackend): 
+0

延續到自己的自定義後端由我'user.user_permissions.add添加一些特定權限user_permission表(*燙髮) '。在通過user.user_permissions.all()訪問權限時,它給了我上面的錯誤。這是我不明白的。 – Shashank