完善Bug 和 普通用户 所有网站的视图

This commit is contained in:
晓丰 2025-04-16 10:38:32 +08:00
parent 5235fe1e77
commit 5474141c26
6 changed files with 61 additions and 18 deletions

View File

@ -5,8 +5,11 @@ from .models import User
@admin.register(User)
class UserAdmin(DefaultUserAdmin):
list_display = ("username", "email", "role", "is_active", "is_staff", "last_login")
list_display = ("username", "email", "role", "source_manager", "is_active", "is_staff", "last_login")
list_filter = ("role", "is_active", "is_staff", "is_superuser")
search_fields = ("username", "email")
fieldsets = DefaultUserAdmin.fieldsets + (
("角色权限", {"fields": ("role",)}),
("角色权限", {"fields": ("role", "source_manager")}),
("网站权限", {"fields": ("managed_websites", "authorized_websites")}),
)
filter_horizontal = ("groups", "user_permissions", "managed_websites", "authorized_websites")

View File

@ -15,26 +15,31 @@ def register(
username: str = Form(...),
password: str = Form(...),
email: str = Form(...),
code: str = Form(None)
code: str = Form(...)
):
if User.objects.filter(username=username).exists():
return {"success": False, "message": "用户名已存在"}
user = User(username=username, email=email, role="user")
user.set_password(password)
user.save()
if code:
try:
reg = RegistrationCode.objects.get(code=code)
if not reg.is_available():
return {"success": False, "message": "注册码已达使用上限"}
user.authorized_websites.set(reg.manager.managed_websites.all())
reg.used_count += 1
reg.save()
except RegistrationCode.DoesNotExist:
return {"success": False, "message": "注册码无效"}
user = User(
username=username,
email=email,
role="user",
source_manager=reg.manager
)
user.set_password(password)
user.save()
reg.used_count += 1
reg.save()
RegistrationCode.objects.create(code=reg, user=user)
refresh = RefreshToken.for_user(user)
return {
@ -51,6 +56,7 @@ def register(
}
}
@auth_router.post("/login")
def login(
request,

View File

@ -117,13 +117,20 @@ def approve_request(request, request_id: int = Query(...), approve: bool = Query
@router.get("/my-sites", auth=jwt_auth)
@login_required
def list_my_authorized_websites(request):
def list_user_manager_websites(request):
user = request.user
sites = user.authorized_websites.all().values("id", "name", "db_alias")
if not user.is_user():
return {"success": False, "message": "仅普通用户可申请网站"}
if not user.source_manager:
return {"success": False, "message": "您尚未绑定所属分管理,无法申请网站"}
sites = user.source_manager.managed_websites.all().values("id", "name", "db_alias")
return {"success": True, "websites": list(sites)}
@router.get("/public-sites")
def list_public_websites(request):
websites = Website.objects.all().values("id", "name", "db_alias", "description")
websites = Website.objects.all().values("id", "name")
return {"success": True, "websites": list(websites)}

View File

@ -21,6 +21,15 @@ class User(AbstractUser):
related_name="authorized_users",
help_text="普通用户被授权可访问的网站"
)
source_manager = models.ForeignKey(
"self",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="brought_users",
limit_choices_to={"role": "manager"},
verbose_name="所属分管理"
)
def is_admin(self):
return self.role == 'admin'

View File

@ -9,3 +9,18 @@ class ResumeDetailInline(admin.StackedInline):
class ResumeDetailAdmin(admin.ModelAdmin):
list_display = ("resume", "phone", "updated_at")
search_fields = ("resume__name", "phone")
@admin.register(ResumeBasic)
class ResumeBasicAdmin(admin.ModelAdmin):
list_display = (
'resume_id', 'name', 'age', 'gender', 'job_status', 'education',
'expected_position', 'last_active_time', 'update_time'
)
search_fields = ('name', 'phone', 'resume_id')
list_filter = ('job_status', 'gender', 'education', 'highest_education', 'source')
ordering = ('-update_time',)
@admin.display(description='数据来源')
def source_name(self, obj):
print(obj.source.name)
return obj.source.name if obj.source else "-"

View File

@ -7,6 +7,9 @@ class Website(models.Model):
db_alias = models.CharField(max_length=50, unique=True, verbose_name="数据库别名")
description = models.TextField(blank=True, verbose_name="描述")
def __str__(self):
return self.name
class Meta:
verbose_name = "网站"
verbose_name_plural = "网站列表"