2017-01-12 21 views
3

Djangoのドキュメントでは、グループにユーザを追加すると、自動的にそのグループに与えられた権限が与えられます。だから、私のアプリケーションでは、私は管理インターフェイスを介して "admin"と呼ばれるグループを作成し、私はそれに必要な許可を与えた。今度は新しいユーザーを作成してそれをグループ「所有者」に追加すると、そのグループの権限はありません。djangoのユーザにgroupの権限を割り当てます

は、それから私は、Djangoのシェルでそれを試してみました、それがうまく走っ 本当にDjangoのユーザモデルで私のコードですuser_permissions


class UserAccount(AbstractUser): 

def __str__(self): # __unicode__ for Python 2 
    return str(self.username) 

def __unicode__(self): 
    return str(self.username) 

def save(self, *args, **kwargs): 
    super(UserAccount, self).save(*args, **kwargs) 
    for group in set(self.groups.all()): 
     self.user_permissions = group.permissions.all() 

別に割り当てられたグループの権限は

class UserAccount(AbstractUser): 

def __str__(self): # __unicode__ for Python 2 
    return str(self.username) 

def __unicode__(self): 
    return str(self.username) 

def save(self, *args, **kwargs): 
    super(UserAccount, self).save(*args, **kwargs) 
    for group in set(self.groups.all()): 
     for perm in group.permissions.all(): 
      self.user_permissions.add(perm) 
をお試しください

管理パネルインターフェイスからユーザーを保存すると両方とも動作しませんが、両方ともdjangoシェルで正常に動作しています 0123をデバッグしようとしましたとコード実行が、

が割り当てられていない権限その後、私はグループ

from django.contrib.auth.models import Group as BaseGroup 
class Group(BaseGroup): 
    class Meta: 
     proxy = True 

    def save(self): 
     super(Group, self).save() 
     for user in self.user_set.all(): 
      user.user_permissions = self.permissions.all() 

から逆の方法でアクセス権を追加しようと私がやったことは権利であるかどうか私にはわからない、それはなぜ権利である場合正しく動作しません。

更新:

ユーザーの権限も管理画面から保存されているため、ユーザは、グループのアクセス権を自動的

答えて

1

これはおそらく動作しませんを持っているようなアクセス許可を割り当てる必要がありません。

次の処理が行われます。ユーザーオブジェクトは

  • を保存する

    1. あなたは次に、ページに設定されたアクセス権が保存されているその保存()メソッド

    2. でアクセス許可を設定し、あなたがsave()で行ったことを上書きします。

    user.user_permissionsに割り当てると、関連するマネージャープロパティーを上書きするという意味ですが、実際には何もしませんので、最後のものも機能しません。

    しかし、ユーザーに管理インターフェイスで手動でグループを割り当てることができれば、ユーザーはそのグループに割り当てられているすべての権限を持つ必要があります。

    "admins"という名前のグループに権限を与えてから、そのユーザーを "所有者"の一部にしたと言いますが、それはちょうどタイプミスだと思います。

  • +0

    私はすでにユーザーにグループを与えており、グループにはアクセス許可があります –

    +0

    本当にユーザーにはグループのアクセス許可があります。 'has_perm'メソッドをチェックしました –

    関連する問題