我在 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,即执行相同操作但没有该模板的东西,那么应用程序就好像没有实现任何权限/授权一样。另一个(哲学)问题是在模板中使用业务逻辑。此外,我的大部分观点对所有用户都是通用的,除了一些内容是可编辑的。