【问题标题】:How to give permissions to users without the admin web app如何在没有管理员 Web 应用的情况下向用户授予权限
【发布时间】:2017-08-15 07:19:23
【问题描述】:

我目前正在尝试制作一个 django 表单以授予用户权限。我的模型有 4 种不同的权限:查看、更新、添加和删除。 我想要一个复选框系统,管理员可以为每个模型选择特定用户的权限

假设,我正在使用这种 url:myapp/update/permissions/user/15 我到达一个页面来选择 id 为 15 的用户的权限。 为简单起见,假设我有一个名为“评论”的模型。在此页面上,我可以选择用户是否可以查看、更新、添加或删除评论。当然,管理员可以同时选择多个复选框,并且用户的权限已经预先勾选。

有谁知道我该如何处理?

提前非常感谢! :)

PS:我知道可以通过管理应用向用户授予权限,但我想拥有自己的应用来处理这个问题。

【问题讨论】:

  • 创建自己的身份验证模型,添加 can_update, can_delete... 等字段。编写装饰器检查请求中的用户can_update, can_delete...
  • 问题是我还是想尽量使用django权限内置系统。对于每个用户,我想使用“users_permissions”字段。从我的不同模型中,我想在他们的“元”字段中添加权限。使用您提出的方法,我需要添加模型,而我感觉一切都已经存在,我只需要将所有东西粘合在一起。在这种情况下,您有其他想法吗?谢谢!

标签: django forms permissions models


【解决方案1】:

您可以使用相应的复选框在模板中创建一个表单,并在视图中更新用户权限。

form.html

<form method='post'>
    <label for="add">Can Add</label>
    <input type="checkbox" name="add" id="add" />
    <label for="change">Can Change</label>
    <input type="checkbox" name="change" id="change" />
    <label for="delete">Can Delete</label>
    <input type="checkbox" name="delete" id="delete" />
</form>

views.py

def form(request):
    if request.method == "POST":
        form = request.POST
        if form.get('add'):
            if not user.has_perm('myapp.add_comment'):
                permission = Permission.objects.get(codename='add_bar')
                request.user.user_permissions.add(permission)
        if form.get('change'):
            if not user.has_perm('myapp.change_comment'):
                permission = Permission.objects.get(codename='change_bar')
                request.user.user_permissions.add(permission)
        if form.get('delete'):
            if not user.has_perm('myapp.delete_comment'):
                permission = Permission.objects.get(codename='delete_bar')
                request.user.user_permissions.add(permission)
return render(request, 'myapp/form.html', {})

欲了解更多信息结帐: https://docs.djangoproject.com/en/1.10/topics/auth/default/#permissions-and-authorization

【讨论】:

  • 感谢您的回复@sachiv-paruchuri。我喜欢你实现这一目标的方式。这实际上是我的第一个想法,并且我开始实施。但是,如果有很多不同的模型我们想要附加特定的权限,那么有很多手动工作要做。此外,当出现新的权限时,它是一项持续的工作。有没有办法自动化这个?使用查询集之类的东西?为了获取与应用程序相关的所有权限并自动显示它们? (也许通过在 forms.py 中预先创建一些东西?)谢谢!
猜你喜欢
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 2017-01-28
相关资源
最近更新 更多