在简单的测试应用程序上使用django-permission(几乎与文档中使用的示例相同),以试图弄清楚它是如何工作的。我已阅读文档并尝试使用此link上提供的示例应用。
问题在于文章的作者无法编辑/删除文章。
相关用户已获得管理部分中的所有权限。
下面列出的关键代码 - 任何非常感谢的帮助
test_app / models.py
class Article(models.Model):
created_by = models.ForeignKey(User)
created = models.DateField(auto_now_add=True)
modified = models.DateField(auto_now=True)
title = models.CharField(max_length=100)
content = models.TextField()
class Meta:
app_label = 'test_app'
from permission import add_permission_logic
from permission.logics import AuthorPermissionLogic
add_permission_logic(Article, AuthorPermissionLogic(
field_name='created_by',
any_permission = False,
change_permission = True,
delete_permission = True,
))
test_app / views.py
@permission_required('change_article')
def change_article(request, *args, **kwargs):
pk = kwargs.pop('pk')
template = 'test_app/edit.html'
article = models.Article.objects.get(id=pk)
if request.method == 'POST':
form = forms.Article_form(request.POST, instance=article)
if form.is_valid():
article = form.save(commit=False)
article.created_by = request.user
article.title = form.cleaned_data['title']
article.content = form.cleaned_data['content']
article.save()
return HttpResponseRedirect('/test/')
else:
raise Http404
else:
form = forms.Article_form(instance=article)
return render(request, template_name=template, context={'form':form})
test_app / perms.py
PERMISSION_LOGICS = (
('test_app.Article', AuthorPermissionLogic()),
)
修改
最后,对link上的项目Github页面进行了较长时间的讨论。
虽然问题的目标已经解决 - 但事实证明,函数本身是一个容易出现意外行为的遗留函数。项目所有者的建议是使用基于类的视图而不是基于函数的视图。
答案 0 :(得分:1)
我真的没有得到什么
相关用户已获得管理部分中的所有权限。
表示(不确定"管理部分"是什么)但是
在perms.py
添加权限逻辑时,您不需要models.py
。
您需要使用test_app.change_article
代替(<app_label>.<perm>_<model_name>
)
顺便说一句,虽然您不需要perms.py
,但这不是问题,但AuthorPermissionLogic
中perms.py
的实例未正确配置尚未指定field_name
那里(如果您未指定,则field_name
的默认值为'author'
。)https://github.com/lambdalisue/django-permission/blob/master/src/permission/conf.py#L24