3

私は 1 つのプロジェクトを開発する準備をしており、そのために使用できるものを計画中です。このプロジェクトには、さまざまなグループ/ユーザー ベースのモデルとオブジェクトの権限と設定が必要になります。

django-objectpermissions (https://github.com/washingtontimes/django-objectpermissions) と django 独自のモデル アクセス許可を使用できることはわかっています。ただし、オブジェクト/モデルのアクセス許可を実際に設定する必要はなく、設定が必要な場合があります。このアカウント/ユーザーは、特定のオブジェクトまたはモデルに関連しない何かを実行できますか? 誰かがこのためのアプリを開発しましたか? または、そのような必要性がある場合、人々はどのようなアプローチをとりますか? おそらく、ダミーの django モデルを作成し、djangos モデルのパーミッションに残りを処理させますか?

また、これが同様のことを行うことも知っています- https://github.com/danielroseman/django-dbsettings。しかし、コードをざっと見てみると、これらの設定はすべてユーザーベースであるという印象を受けました。グループベースの設定も必要です。

編集:人々は私に許可アプリを提供し続けます。私が探しているのは、アクセス許可アプリではなく、設定アプリです。これらの設定/権限は、どのオブジェクトにも関連していません。

基本的。私のプロジェクトでは、質問に答える必要があります - Can this user see/do this thing?. その「もの」はおそらくビューです。したがって、答えの1つはほとんど機能します。しかし、私がビューで行うチェックは、ユーザーがモデル/オブジェクトへのアクセス許可を持っているかどうかではありません。むしろ、ユーザーがこの設定をオンにしている場合、ユーザー グループがこの設定をオンにしている場合です。

アラン

4

3 に答える 3

3

このためには、おそらく独自のシステムを作成する必要があります。それほど難しいことではないはずです。

class Setting(models.Model):
    name = models.CharField(..)
    value = models.CharField(..)
    users = models.ManyToManyField(User)
    groups = models.ManyToManyField(Group)

    @classmethod
    def has_setting(cls, name, user):
        user_settings = cls.objects.filter(name=name, users__in=[user]).count()
        group_settings = cls.objects.filter(name=name, groups__in=user.groups.all()).count()
        return user_settings or group_settings

    @classmethod
    def get_settings(cls, name, user, priority=User):
        user_settings = list(cls.objects.filter(name=name, users__in=[user]))
        group_settings = list(cls.objects.filter(name=name, groups__in=user.groups.all()))
        if user_settings and not group_settings: 
            return user_settings
        elif group_settings and not user_settings:
            return group_settings
        else:
            return (group_settings, user_settings)[priority==User]

次に、ビューで次のようなことができます。

def display_frob(request):
    if Setting.has_setting('display_frob', request.user):
         settings = Setting.get_setting('display_from', request.user, priority=Group)
         values = [setting.value for setting in settings]
         # if the User was in many groups, we now have a list of values, for the setting
         # `display_frob`, that aligns with each of those groups

チェックを行い、値のリスト (または単一の項目) をビューに提供するデコレータを簡単に作成できます。

于 2011-02-20T12:22:48.267 に答える
0

「アクション」(アクションは通常、ビューによって実装される)のパーミッションには、通常、デコレータを使用します。

user_passes_testデコレータは、この種の目的に最適です。

モデルにリンクされていないユーザー権限を作成できます。

于 2011-02-19T23:46:13.767 に答える
0

多分これはあなたが探しているものです: django-guardian

于 2011-02-20T10:03:04.830 に答える