完善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) @admin.register(User)
class UserAdmin(DefaultUserAdmin): 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") list_filter = ("role", "is_active", "is_staff", "is_superuser")
search_fields = ("username", "email")
fieldsets = DefaultUserAdmin.fieldsets + ( 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,25 +15,30 @@ def register(
username: str = Form(...), username: str = Form(...),
password: str = Form(...), password: str = Form(...),
email: str = Form(...), email: str = Form(...),
code: str = Form(None) code: str = Form(...)
): ):
if User.objects.filter(username=username).exists(): if User.objects.filter(username=username).exists():
return {"success": False, "message": "用户名已存在"} return {"success": False, "message": "用户名已存在"}
user = User(username=username, email=email, role="user") try:
reg = RegistrationCode.objects.get(code=code)
if not reg.is_available():
return {"success": False, "message": "注册码已达使用上限"}
except RegistrationCode.DoesNotExist:
return {"success": False, "message": "注册码无效"}
user = User(
username=username,
email=email,
role="user",
source_manager=reg.manager
)
user.set_password(password) user.set_password(password)
user.save() user.save()
if code: reg.used_count += 1
try: reg.save()
reg = RegistrationCode.objects.get(code=code) RegistrationCode.objects.create(code=reg, user=user)
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": "注册码无效"}
refresh = RefreshToken.for_user(user) refresh = RefreshToken.for_user(user)
@ -51,6 +56,7 @@ def register(
} }
} }
@auth_router.post("/login") @auth_router.post("/login")
def login( def login(
request, 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) @router.get("/my-sites", auth=jwt_auth)
@login_required @login_required
def list_my_authorized_websites(request): def list_user_manager_websites(request):
user = request.user 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)} return {"success": True, "websites": list(sites)}
@router.get("/public-sites") @router.get("/public-sites")
def list_public_websites(request): 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)} return {"success": True, "websites": list(websites)}

View File

@ -21,6 +21,15 @@ class User(AbstractUser):
related_name="authorized_users", related_name="authorized_users",
help_text="普通用户被授权可访问的网站" 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): def is_admin(self):
return self.role == 'admin' return self.role == 'admin'

View File

@ -9,3 +9,18 @@ class ResumeDetailInline(admin.StackedInline):
class ResumeDetailAdmin(admin.ModelAdmin): class ResumeDetailAdmin(admin.ModelAdmin):
list_display = ("resume", "phone", "updated_at") list_display = ("resume", "phone", "updated_at")
search_fields = ("resume__name", "phone") 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="数据库别名") db_alias = models.CharField(max_length=50, unique=True, verbose_name="数据库别名")
description = models.TextField(blank=True, verbose_name="描述") description = models.TextField(blank=True, verbose_name="描述")
def __str__(self):
return self.name
class Meta: class Meta:
verbose_name = "网站" verbose_name = "网站"
verbose_name_plural = "网站列表" verbose_name_plural = "网站列表"