0

我在 django 中实现了一个权限系统,但它非常基础,我认为可能有更好的方法。

据我了解,权限是附加到某些用户的标签,然后由我决定与他们关联的操作。例如,can_edit只是某些用户可以执行的操作的名称,这将由我稍后决定。

can_edit我使用命令行在某个模型上创建权限,

from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Group, User, Permission

itmod_ct = ContentType.objects.get(app_label='myapp', model='mymodel')
can_modify = Permission(name='Can Modify', codename='can_modify_model', content_type=itmod_ct)
can_modify.save()
#some group of users g
g.permissions = (can_modify,)
g.save()

然后在模板中,我通过在

{% if perms.myapp.can_modify_model %}
... action that can be performed
{% endif %}

这种方法的主要问题是,假设我现在在将来实现一个 API,即执行相同操作但没有该模板的东西,那么应用程序就好像没有实现任何权限/授权一样。另一个(哲学)问题是在模板中使用业务逻辑。此外,我的大部分观点对所有用户都是通用的,除了一些内容是可编辑的。

4

1 回答 1

0

重新“can_edit对某个模型的权限”...“添加”、“更改”和“删除”权限是由 Django 为每个模型自动创建的,所以这可能是多余的

重新这样做:

{% if perms.issuetracker.can_modify_itmod %}
... action that can be performed
{% endif %}

这没关系,只是因为这不应该是实际执行权限的地方。这只是一些代码来决定向用户显示什么选项。权限的实际执行将发生在处理该操作的视图中。

这完全取决于您,但通常希望尽可能多地将业务逻辑一直推到模型中,尽管通常在视图层还有很多工作要做。您是正确的,业务逻辑不应该留给模板中的代码。

于 2014-06-24T16:45:47.770 回答