2012-06-26 3 views
1

Учитывая таблицу в MySQL с строками, которые имеют поле «Страна», мне необходимо предоставить разрешения пользователям. По сути, я хочу сказать: «У пользователя X есть доступ к Германии + Франция + Канада», но «У пользователя есть доступ к Франции + США». Я думаю, что хорошим подходом может быть использование групп Django (т.е. - 1 группа для каждой страны и соответственно добавить людей). Моя проблема заключается в том, что я хочу убедиться, что я запрашиваю у набора разрешенных данных по соображениям безопасности.Промежуточный уровень безопасности (Django/SQL)

Одним из подходов, например, было бы создание представления im MySQL для каждой возможной комбинации (только Германия, Германия + Франция, почти до бесконечности), но, очевидно, это невозможно, учитывая количество потенциальных перестановок. Я мог бы сделать 1 просмотр для каждой страны и запросить каждый отдельно, но тогда я оказываю большое давление на БД, если пользователю разрешен доступ, чтобы сказать 20 разных стран.

Итак, как я могу эффективно и безопасно запрашивать эти данные, чтобы сделать 100% уверенным, что я только верну авторизованные данные?

PS: не обязательно на уровне SQL. Если у Django есть какая-то шляпа, я могу это сделать, и с этим все будет в порядке.

ответ

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)