You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django多用户组设计咨询:人力资源服务平台用户权限实现方案

人力资源平台用户权限实现方案

不需要单独创建Admin、Owner、Employee、Employer四个独立模型类,基于Django的AbstractUser扩展用户模型,结合**内置用户组(Group)和权限(Permission)**系统就能满足需求,这种方式更易维护且符合Django最佳实践。

一、创建用户应用并扩展AbstractUser

  1. 新建用户应用:
python manage.py startapp accounts
  1. 在settings.py中配置自定义用户模型:
AUTH_USER_MODEL = 'accounts.CustomUser'
  1. 在accounts/models.py中编写扩展后的用户模型:
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    # 新增业务相关字段:关联企业(雇主专属)、员工编号(员工专属)
    company = models.ForeignKey('companies.Company', on_delete=models.SET_NULL, null=True, blank=True, related_name='employers')
    employee_id = models.CharField(max_length=50, null=True, blank=True)
    
    # 可选:添加用户类型标识,方便快速识别(核心权限仍依赖组控制)
    USER_TYPE_CHOICES = (
        ('admin', '管理员'),
        ('owner', '平台所有者'),
        ('employer', '雇主'),
        ('employee', '员工'),
    )
    user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES, null=True, blank=True)

二、配置用户组与权限

利用Django内置的Group和Permission系统,直接通过组批量管理权限:

  1. 初始化用户组:通过Django后台手动创建4个组:Admin、Owner、Employer、Employee
  2. 为各组分配对应权限:
    • Admin组:勾选所有模型的add/change/delete/view权限
    • Owner组:勾选所有模型的add/change/view权限,取消delete权限
    • Employer组:仅给岗位/活动模型分配add/change/view权限,取消delete权限
    • Employee组:给活动模型分配view权限,以及活动状态修改的change权限

三、对象级权限控制(雇主专属)

为了限制雇主只能操作自身企业的岗位/活动,需在视图中增加对象级判断:

from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import get_object_or_404
from django.http import HttpResponseForbidden

@login_required
@permission_required('jobs.change_job', raise_exception=True)
def update_job(request, job_id):
    job = get_object_or_404(Job, id=job_id)
    # 验证当前用户是否为该岗位所属企业的雇主
    if request.user.user_type == 'employer' and request.user.company != job.company:
        return HttpResponseForbidden("你无权修改其他企业的岗位")
    # 后续更新逻辑...

四、简化方案(Admin与Owner合并)

若要简化实现,直接将Owner组的权限配置为与Admin组几乎一致,仅去掉delete权限即可,无需单独创建Owner模型。也可直接复用Admin组,给特定用户单独取消delete权限(组管理方式更高效)。

五、模板中的权限判断

在前端模板中使用Django内置标签直接判断权限:

{% if perms.jobs.add_job %}
    <a href="{% url 'job_create' %}">发布新岗位</a>
{% endif %}

{% if user.groups.all.0.name == 'Admin' %}
    <button>删除岗位</button>
{% endif %}

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:06:17