1

'Country'フィールドを持つ行を持つMySQLのテーブルを考えると、ユーザーに権限を提供する必要があります。基本的に、「Xユーザーはドイツ+フランス+カナダにアクセスできます」と言いたいのですが、「Yユーザーはフランス+米国にアクセスできます」と言いたいです。良いアプローチは、Djangoのグループを使用することかもしれないと思います(つまり、国ごとに1つのグループを持ち、それに応じて人を追加します)。私の問題は、セキュリティ上の理由から、許可されたデータのセットに対してクエリを実行していることを確認したいということです。

たとえば、1つのアプローチは、可能な組み合わせごとにMySQLのビューを作成することです(ドイツのみ、ドイツ+フランス、ほぼ無限大)が、潜在的な順列の数を考えると、これは明らかに実現可能ではありません。国ごとに1つのビューを作成し、それぞれを個別にクエリすることもできますが、ユーザーが20か国にアクセスできるようになると、DBに大きなプレッシャーがかかります。

では、このデータを効率的かつ安全にクエリして、許可されたデータのみを取得することを100%確実にするにはどうすればよいでしょうか。

PS:必ずしもSQLレベルではありません。Djangoにこれを実行できる機能ハットがあれば、それで問題ありません。

4

1 に答える 1

1

ユーザーとの多対多の関係を持つ 別のモデルを作成し、モデルにアクセスするときにこの関係全体でクエリを実行できます。

class Country(models.Model):
    name = models.CharField(max_length=64)
    iso_code = models.CharField(max_length=2)
    users = models.ManyToManyField("auth.User")

class MyModel(models.Model):
    country = models.ForeignKey(Country)
    ...

MyModel.objects.filter(country__users=current_user)
于 2012-06-27T20:58:33.527 に答える