Пользовательская структура разрешений Django - PullRequest
1 голос
/ 17 марта 2011

Мне нужно создать специальную структуру разрешений, которая не только разрешает / запрещает пользователей, но и может задавать, сколько объектов может создавать пользователь данного типа.

Например, мне нужно установить, какМного раз пользователь может отправить новый заказ пиццы.

Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Вам, вероятно, придется просто написать это самостоятельно.Слишком много вариаций, чтобы сделать что-то подобное без создания внутренней платформы.Например, максимальное количество заказов, которое пользователь отправляет навсегда, или это тариф (количество заказов пиццы в день)?Чтобы узнать, сколько заказов было отправлено пользователем за определенный период времени, вам просто нужна некоторая фильтрация в функции просмотра:

thisTimeYesterday = datetime.now() - datetime.timedelta(days=1)
if PizzaOrder.objects.filter(time_placed__gte=thisTimeYesterday, 
    user=request.user).count() >= 3:
    return HttpResponseForbidden("How much pizza do you need, anyway?")

Если вы пытаетесь применить это в админе (мое правилобольшой палец: никогда не позволяйте никому за пределами удушающего доступа обращаться к администратору), вы можете использовать пользовательскую проверку .

0 голосов
/ 22 апреля 2013

Я столкнулся с подобной проблемой и написал пакет, который управляет сложными разрешениями этих типов.В основном вы используете файл rules.py для определения всех логических правил вашего приложения, которые затем можно использовать во всем проекте, от шаблонов до хуков ваших представлений.

https://bitbucket.org/aashe/django-logical-rules

Вотпример шаблона:

{% load logical_rules_tags %}
{% testrule user_can_edit_mymodel object request.user %}
    <p>You are the owner!</p>
{% endtestrule %}

А если вы расширяете общие представления на основе классов django:

class MyView(RulesMixin, DetailView):

    def update_logical_rules(self):
            super(MyView, self).update_logical_rules()
            self.add_logical_rule({
                    'name': 'user_can_edit_mymodel',
                    'param_callbacks':
                            [('get_request_user', 'get_object')],
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...