0

アプリにProductsクラスとCompaniesクラスがあります。さて、ある会社にFKのある商品を管理してもらいたいです。例:

会社は次のとおりです。FooとBar製品は次のとおりです。Apple(Fooが製造、つまりFK to it)、PearとPlum(Barが製造)

johndoe@email.comはFooを所有するユーザーであり、janedoe@email.comはBarを所有するユーザーです。JohnがFooに製品を追加、削除、編集できるようにprivを設定したいのですが、Fooに関連するものだけです。

どうすればいいですか?

4

1 に答える 1

1

私はこの種のもののためにdjango-guardian(https://github.com/lukaszb/django-guardian.git)が本当に好きです。Djangoにオブジェクトレベルの権限を提供します。

私があなたの特定の問題に取り組む方法は次のとおりです。

会社の所有者が実行できるアクションを定義します

class Meta:
    permissions = [('can_add', 'Add product to company'), etc...]

次に、save()に追加して、新しい会社の作成時に会社ごとにグループを作成します。

def save():
    # Create a permission group named %s_group % company_name
    # assign(permission, group) - add the permissions to this group.

この時点で、例ではFoo_groupとBar_groupがあり、それらのオブジェクトのアクセス許可がグループに割り当てられています。

これで、あとは、さまざまな企業グループのユーザーを追加/削除して、それらのオブジェクトに関連付けられたアクセス許可を付与するだけです。

これの最後のコンポーネントは、関連するアクションで権限をチェックすることです。これは、各アクションの適切なビューで実行できます。追加、削除など。

パーミッションチェックにMixinsを使用するのは本当に素晴らしいので、クラスベースのビューが好きです。Guardianには、すぐに使用できるPermissionRequiredMixinが付属していますが、通常、より複雑な状況ではカスタムが機能します。

于 2013-01-05T05:17:46.343 に答える