あなたが実際に許可グループを探しているように思えます。それらは独立してモデルを簡単に作成できます。ユーザー グループには、実際のアクセス許可を含める必要はありません。
ユーザーが特定のグループに属しているかどうかを確認できます。
def user_in_group(user, group_name):
return user.groups.filter(name=group_name).count()
次のように使用できます。
def my_view(request):
if user_in_group(request.user, 'view_all'):
# do the things
else:
# do the other things
# limit this view to 'view_all' users
@user_passes_test(lambda u: user_in_group(u, 'view_all'))
def my_other_view(request):
# and do some more things
私はあなたが何を意味するのか分かりません
これを信号レベルで実装しましたか、それともモデルが使用される各ポイントで実装しましたか?
明らかに、どの認証方法でも、モデルが表示される場所にチェックを挿入し、許可された列のみを表示するロジックを挿入する必要があります (テンプレートで列のサブセットをレンダリングするなど)。
間違った列がアクセスされないようにするために、適切なフィールド/列へのアクセスを制限し、モデル インスタンスの代わりにプロキシ インスタンスを使用するプロキシ クラスを作成できます。
class SomeModelProxy(object):
def __init__(self, model_instance, user):
self.instance = model_instance
self.user = user
def save(self, *args, **kwargs):
self.instance.save(*args, **kwargs)
# define other methods that are needed...
def __getattr__(self, name):
if not name in get_allowed_columns_for_user_somehow(self.user):
raise AttributeError
return getattr(self.instance, name)
def __setattr__(self, name, value):
if not name in get_allowed_columns_for_user_somehow(self.user):
raise AttributeError
setattr(self.instance, name, value)