Django自定义权限框架

时间:2011-03-17 14:13:23

标签: django

我需要创建一个自定义权限框架,不仅允许/禁止用户,还可以设置用户可以创建给定类型的对象数。

例如,我需要能够设置用户提交新披萨订单的次数。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

你可能不得不自己写。在没有创建内部平台的情况下,制作类似通用的内容太多了。例如,用户提交永久物品的最大订单数量,还是费率(每天的披萨订单)?要了解用户在一段时间内提交了多少订单,您只需在视图功能中进行一些过滤:

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?")

如果你想在管理员中强制执行此操作(我的经验法则:永远不要让任何人在扼杀距离之外访问管理员),你可以使用custom validation

答案 1 :(得分:0)

我遇到了类似的问题并编写了一个管理这些类型复杂权限的包。您基本上使用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')],
            })