2017-08-14 55 views
1

我需要檢查每個認證用戶所需的權限使用Django和Python。我在下面解釋我的代碼。如何根據使用Django和Python的已認證用戶檢查權限

class Permission(models.Model): 
    """docstring for Permission""" 

    user_id = models.ForeignKey(User) 
    class Meta: 
     permissions = (
      ("view_reactor", "1"), 
      ("find_reactor", "1"), 
      ("controll_reactor", "0"), 
     ) 

Views.py:

from django.contrib.auth.decorators import permission_required 


def view_reactor(request): 
    """ This function for to get serch screen. """ 

    return render(request, 'plant/view_reactor.html', 
         {'count': 1}) 

在這裏,我需要檢查@permission_required裝飾功能按適當userid。假設登錄的用戶有權限("view_reactor", "1"),那麼view_reactor函數可以訪問,如果("view_reactor", "0")那麼它不能被訪問。

+0

? meta當然不能存儲這些東西。你必須有一個類變量來存儲權限,然後檢查 –

+0

你可以根據我的要求通過一篇文章分享你的想法嗎? – satya

+0

[This](https://ghrhome.gitbooks.io/djangoknowhow/using_the_django_authentication_system/the_permission_required_decorator。HTML)可能會幫助你 –

回答

1

你添加額外的權限模型,其中第一個值是允許的名稱和第二個是人類可讀的名稱,(這裏meta permissions細節),所以如果我明白你需要它添加到您的Reactor模型,例如:

class Reactor(models.Model): 
    # ^^^^^^ 
    # .... 
    user_id = models.ForeignKey(User) 

    class Meta: 
     permissions = (
      ("view_reactor", "can view reactor"), 
      ("find_reactor", "can find reactor"), 
      ("controll_reactor", "can controll reactor"), 
     ) 

和您可以在視圖中使用

from django.contrib.auth.decorators import permission_required 

@permission_required('reactor.view_reactor') 
def view_reactor(request): 

對不起,如果我誤解

+0

然後如何更改權限意味着我不想給所有三個權限給特定用戶。那將是怎樣的情況。 – satya

+0

您需要進行遷移和遷移,然後以標準方式分發此權限 –

+0

對於db中的不同行,元類不能不同,因此用戶的權限將如何與其他用戶不同?你可能想要解釋你上面提到的標準方式 –

0

你爲什麼不使用的用戶,Permiss離子,Django具有默認的組類?

models.py in exampleApp 
class ExampleModel(models.Model): 
    somefield = models.CharField(max_length=4) 

,如果你做 'makemigration' 和 '遷移',它創建 'add_examplemodel', 'change_examplemodel', 'delete_examplemodel' 自動。您可以檢查數據庫中的auto_permission表。

models.py in exampleApp 
class ExampleModel2(models.Model): 
    somefield = models.CharField(max_length=4) 
    class Meta: 
     permissions = ((permission_code, human_readable_permission_name),) 

,如果你做「makemigrations」和「遷移」與模型,它不會創建三個默認的權限,但只有一個你在元類命名。 (它可以在您創建模型時起作用,而不會在您編輯時起作用)

您可以在Admin頁面中添加權限。

這只是在權限類中添加權限名稱。您需要爲用戶設置權限。

您可以像這樣在用戶中授予權限。

user = User.objects.get(id=someidnumber) 
# User and Permissions Class have manytomany relationship. 
user.permissions_set.add(permission, ...) 
# you can set user 1 have one permission like view_reactor. 
# you can set user 2 have two permission like view_reactor, find_reactor. 
# you can give permissions to each user independently. 

然後,您可以使用@permission_required decorator

,如果你想給用戶1有view_reactor權限。只需通過User.objects.get(id=user1_id).permissions_set.add(view_reactor permission)授予用戶1的許可。然後@permission_required decorator將檢查。

請閱讀下面的手冊。

Adding Permission in Manual

permission_required decorator in manual

你在哪裏存儲用戶的權限
+0

我將在models.py文件中聲明這個類class ExampleModel(models.Model):@Jayground。 – satya

+0

你不必這樣做。您只需在管理頁面添加權限即可。如果你只是在Permission類中設置了允許權限的空模型,我認爲只需在Admin頁面添加會更好。 – Jayground

+0

我的意思是這些定義的類,我必須寫。 – satya