3

3 つのユーザー グループしか持たないことが事前にわかっているプロジェクトがあるとします。GroupParent から継承して事前に定義し、これらのグループの選択肢を使用して UserProfile にフィールドを追加できますか?? これは基本的に私がやりたいことです:

class GroupParent(??):
    class Meta:
        permissions = (
            ('do_something', 'Can do something'),
            ('edit_task', 'Can edit task'),
     );

class GroupAdmin(GroupParent):
    class Meta:
        // I want to inherit the permissions from the Mixin and add a few
        // I know this would only overwrite... how do I do it?
        permissions = (
            ('do_fancy_tasks', 'Can do fancy tasks'),
         )

class GroupCoordinator(GroupParent):
     class Meta:
     // inherit from GroupParent and add my own
         permissions = (
            ('open_file', 'Can open files'),
         )

class GroupNormal(GroupParent):
     class Meta:
     // inherit from GroupParent and add my own
         permissions = (
            ('open_file', 'Can open files'),
            ('edit_file', 'Can edit files'),
         )

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    has_manager = models.BooleanField()
    ...
    ...
    group = models.CharField(max_length=2, choices=GROUP_CHOICES) // how??

これは合理的なアプローチですか、それともアプリが構築されたら (または構築中に) グループとアクセス許可をあきらめて設定する必要がありますか?

また... django のデフォルトの許可機能よりも django-guardian を使用する利点は何ですか?また、これらのモデルで使用する場合は何に注意すればよいですか? ありがとう!

4

1 に答える 1

2

単純なタプルの追加はどうですか?

class GroupParent(object):
    class Meta:
        permissions = (
            ('do_something', 'Can do something'),
            ('edit_task', 'Can edit task'),
        )

class GroupAdmin(GroupParent):
    class Meta:
        permissions = GroupParent.Meta.permissions + (
            ('do_fancy_tasks', 'Can do fancy tasks'),
         )

GroupParent は単なる mixin であるため、これで問題ありません。GroupParent が Django モデルの場合、 を使用する必要がありますGroupParent._meta.permissions

于 2012-11-12T15:52:13.043 に答える