我已经在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,即执行相同操作但没有该模板的东西,那么应用程序就像没有实现所有权限/授权一样。另一个(哲学)问题是在模板中使用业务逻辑。此外,我的大多数观点对所有用户都是通用的,除了一些可以编辑的东西。
答案 0 :(得分:0)
重新获得某个模型的can_edit
权限“......添加','更改'和'删除'权限由Django为每个模型自动创建,因此这可能是多余的
这样做:
{% if perms.issuetracker.can_modify_itmod %}
... action that can be performed
{% endif %}
这没关系,只是因为这不应该是实际执行权限的地方。这只是一些代码,用于决定向用户显示的选项。权限的实际执行将在处理操作的视图中发生。
这取决于您,但通常需要尽可能地将业务逻辑一直推向模型,尽管通常在视图层仍有很多工作要做。您是正确的,不应将业务逻辑留给模板中的代码。