Django Celery如何进行任务授权

2023-04-11 00:00:00 django celery 授权

Django Celery 可以使用任务授权来限制哪些用户可以执行特定的任务。这是非常有用的,特别是当你拥有一个高度安全的应用程序时。

首先,在 Django 中定义一个任务可以像这样:

from celery import shared_task

@shared_task
def send_email(to, subject, message):
    # 发送电子邮件的逻辑

要授权这个任务,我们需要定义一个 celery_auth 模块,它将包含授予权限的功能。我们将使用 Django 的 authentication 库来限制哪些用户可以执行任务。

from django.contrib.auth.decorators import user_passes_test

def is_admin(user):
    return user.is_staff

admin_required = user_passes_test(is_admin)

这个函数仅允许具有 staff 权限的用户执行任务。

现在,我们可以使用 celery_auth 模块来授权任务:

from celery import shared_task
from celery_auth import admin_required

@shared_task
@admin_required
def send_email(to, subject, message):
    # 发送电子邮件的逻辑

现在,只有拥有 staff 权限的用户才可以执行 send_email 任务。

代码演示:

  1. 定义任务
from celery import shared_task

@shared_task
def print_message(message):
    print(message)
  1. 定义 celery_auth 模块:
from django.contrib.auth.decorators import user_passes_test

def is_allowed(user):
    return user.username == "pidancode.com"

allowed_user = user_passes_test(is_allowed)
  1. 使用 celery_auth 模块授权任务
from celery import shared_task
from celery_auth import allowed_user

@shared_task
@allowed_user
def print_message(message):
    print(message)

现在,只有用户名为“pidancode.com”的用户可以执行 print_message 任务。

相关文章