[Python] グループからdjangoでカスタムグループを作成する方法


Answers

Question

私はDjangoでカスタムグループを作成する方法を理解しようとしています。グループはアプリケーションではなくプロジェクトに関連しています。

たとえば、ユーザーが会社を作成する場合は、会社の所有者である必要があります。

モデル

class Company(models.Model):
    owner = models.ForeignKey(User)
    name = models.CharField(max_length=64, unique=True)
    description = models.TextField(max_length=512)
    created_on = models.DateTimeField(auto_now_add=timezone.now)

    class Meta:
        permissions = (
            ("erp_view_company", "Can see the company information"),
            ("erp_edit_company", "Can edit the company information"),
            ("erp_delete_company", "Can delete the company"),
        )

見る

# Create your views here.
def register(request, template_name='erp/register.html'):
    if request.method == 'POST':
        company_form = CompanyRegistrationForm(request.POST)
        if company_form.is_valid():
            # Create a new company object but avoid saving it yet
            new_company = company_form.save(commit=False)
            # Set the owner
            if request.user.is_authenticated():
                new_company.owner = request.user

            # Add the user to group admin
            group = Group.objects.get_or_create(name="erp_admin")
            request.user.groups.add(group)

            # Save the User object
            new_company.save()

            template_name = 'erp/register_done.html'
            return render(request, template_name, {'new_company': new_company})

    else:
        company_form = CompanyRegistrationForm()

    return render(request, template_name, {'company_form': company_form})

ここでの質問:

1) Group.objects.get_or_create(name="erp_admin")を持つ代わりに、アプリケーションのグループがアプリケーションに限定されているようにCompanyGroup.objects.get_or_create(name="admin")を持っていたいと思います。

2)各モデルのメタクラスで定義された権限をグループにどのようにマップできますか?

3)カスタムグループは会社に関連しています。つまり、各会社にはオーナーから始まるグループAdminがあります。 所有者は "Manager"のようなユーザーを作成できます。 管理者は、グループ/許可を作成し、ユーザーを追加し、ユーザーに権限を設定できますが、管理グループをCRUDすることはできません。 ですから、グループにはある種の階層があります(階層にはグループに追加される権限に依存していると思います)。

ここでより明確にするために、概念の絵を見ることができます:

だから、主な問題は次のようなものだと思う:

1)グループを継承してカスタムグループを作成する方法。

2)モデルのパーミッションをグループにマッピングする方法。

3)グループをCompanyIDに制限する方法。

問題がよく定義されていることを願っています。 何かを明確にしなければならないかどうか教えてください。

サポートに事前に感謝します。

編集1)

ポイント3については、私はこの答えを見つけました: 拡張djangoのグループとパーミッションですが、問題はそれらのデータを照会する方法とパーミッションをチェックする方法です。 また、save()メソッドをオーバーライドして、 'name'プロパティにメタ情報を追加する方法はありますか? グループ名は、 "company_id#admin"または "company_id#manager"のようになります。