【问题标题】:How to restrict admin link/button in Django?如何限制 Django 中的管理链接/按钮?
【发布时间】:2021-06-08 06:09:36
【问题描述】:

这是我所期望的:如果用户的位置为“1”(管理员),那么 home.html 中的导航菜单必须显示指向管理页面的“管理员”链接。如果用户的位置为“2”(用户),则不会显示链接。

但是当我运行服务器时,此代码会生成与注册用户一样多的管理链接。我只想显示当前登录用户的一个链接。我怎样才能做到这一点?我知道“for user in position”有问题,但是如何为当前登录的用户修复它?

models.py

class Profile(models.Model):
    positions = (
        ('1', 'Admin'),
        ('2', 'User'),
    )

    user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    position = models.CharField(max_length=50, default='Position', choices=positions)

views.py

def home(request):
    user_position = Profile.objects.all()
    return render(request, 'home.html', {
        'position': user_position,
        })

home.html

{% for user in position %}
    {% if user.position == '1' %}
        <a class="nav-link" aria-current="page" href="/admin">Admin</a>
    {% endif %}
{% endfor %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    您还可以在模板中使用is_superuser 属性来实现此目的:

    {% if user.is_superuser %}
     <a href="#">admin</a>
    {% endif %}
    

    如果您只想根据用户名进行检查,您可以使用:

    {% if user.username == "Admin" %}
       <a href="#">admin</a>
    {% endif %}
    

    您可以做的另一件事是在管理面板中创建 2 个组;管理员和用户。 然后你必须创建一个自定义模板标签(例如has_group)来显示基于这些组的导航项,我认为这是一个更好的解决方案。然后你可以在你的模板中使用这样的东西:

    {% if user|has_group:"admin" %} 
        <p>User belongs to the admin group 
    {% else %}
        <p>belongs to users group</p>
    {% endif %}
    

    【讨论】:

    • 所以我不需要创建自定义职位(管理员和用户)?
    • 好的,但是如何在不使用 user.is_superuser 的情况下做同样的事情呢?我们可以以某种方式检查用户是否是“管理员”吗?我想稍后为职位创建其他类别,所以我需要以其他方式进行。
    • 编辑了我的答案。希望它有所帮助:)
    猜你喜欢
    • 2015-09-08
    • 2014-03-21
    • 1970-01-01
    • 2017-11-03
    • 2010-10-22
    • 2018-02-08
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多