From c648e0c22ed46e234f5b43fd2189ed805e2a762f Mon Sep 17 00:00:00 2001 From: sichan Date: Wed, 5 Jun 2024 16:31:01 +0800 Subject: [PATCH] commit --- application/accounts/urls.py | 4 ++- application/accounts/views.py | 36 ++++++++++++++++--------- templates/authority_modal.html | 49 +++++++++++++++++++++++++++++----- 3 files changed, 69 insertions(+), 20 deletions(-) diff --git a/application/accounts/urls.py b/application/accounts/urls.py index c272395..d8d0a17 100644 --- a/application/accounts/urls.py +++ b/application/accounts/urls.py @@ -2,7 +2,8 @@ from django.urls import path, include from django.contrib.auth import views as auth_views -from application.accounts.views import logout_view, user_permissions_list, get_user_existing_permissions, save_user_permissions +from application.accounts.views import logout_view, user_permissions_list, get_user_existing_permissions, \ + save_user_permissions, refresh_user_permissions urlpatterns = [ path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='user_login'), @@ -11,4 +12,5 @@ urlpatterns = [ path('user_permissions/', user_permissions_list, name='user_permissions_list'), path('get_user_existing_permissions//', get_user_existing_permissions, name='get_user_existing_permissions'), path('save_user_permissions//', save_user_permissions, name='save_user_permissions'), + path("refresh_user_permissions//", refresh_user_permissions, name="refresh_user_permissions"), ] diff --git a/application/accounts/views.py b/application/accounts/views.py index 2cfe4a4..a56f2bb 100644 --- a/application/accounts/views.py +++ b/application/accounts/views.py @@ -175,14 +175,6 @@ def get_user_existing_permissions(request, user_id): # 获取用户的个人权限 user_permissions = user.user_permissions.all().values_list('codename', flat=True) - # 获取用户所在组的权限 - group_permissions = Permission.objects.filter(group__user=user).values_list('codename', flat=True) - - # 合并用户个人权限和组权限 - user_permissions_set = set(user_permissions) - group_permissions_set = set(group_permissions) - all_user_permissions = user_permissions_set.union(group_permissions_set) - # 处理数据以合并相同资源分组和资源名称的权限 processed_permissions = {} for perm in all_permissions: @@ -200,13 +192,13 @@ def get_user_existing_permissions(request, user_id): } if perm['permission'] == '新增': - processed_permissions[key]['add'] = perm['codename'] in all_user_permissions + processed_permissions[key]['add'] = perm['codename'] in user_permissions elif perm['permission'] == '删除': - processed_permissions[key]['remove'] = perm['codename'] in all_user_permissions + processed_permissions[key]['remove'] = perm['codename'] in user_permissions elif perm['permission'] == '修改': - processed_permissions[key]['change'] = perm['codename'] in all_user_permissions + processed_permissions[key]['change'] = perm['codename'] in user_permissions elif perm['permission'] == '查看': - processed_permissions[key]['view'] = perm['codename'] in all_user_permissions + processed_permissions[key]['view'] = perm['codename'] in user_permissions return JsonResponse({'permissions': list(processed_permissions.values()), 'user_id': user_id}) @@ -261,3 +253,23 @@ def save_user_permissions(request, user_id): continue return JsonResponse({'success': True, 'message': 'Permissions updated successfully'}) + + +@login_required +@group_required('系统管理') +def refresh_user_permissions(request, user_id): + if request.method != 'POST': + return JsonResponse({'error': 'Invalid request method'}, status=400) + + user = get_object_or_404(User, pk=user_id) + + # 清空用户的个人权限 + user.user_permissions.clear() + + # 获取用户所在组的权限ID + group_permissions = Permission.objects.filter(group__user=user).values_list('id', flat=True) + + # 为用户分配组权限 + user.user_permissions.add(*group_permissions) + + return JsonResponse({'success': True, 'message': 'User permissions refreshed successfully'}) diff --git a/templates/authority_modal.html b/templates/authority_modal.html index 3bfdc46..4e0c349 100644 --- a/templates/authority_modal.html +++ b/templates/authority_modal.html @@ -28,6 +28,7 @@ + @@ -56,6 +57,7 @@ $(document).ready(function() { let currentPage = 1; let permissionsData = []; let modifiedPermissions = {}; + let userId = null function renderTable(page) { const start = (page - 1) * itemsPerPage; @@ -121,7 +123,7 @@ $(document).ready(function() { }); $('.btn-outline-primary').on('click', function() { - const userId = $(this).closest('tr').data('id'); + userId = $(this).closest('tr').data('id'); $('#savePermissions').data('user-id', userId); // 确保在模态框显示时设置用户ID const url = "{% url 'get_user_existing_permissions' 0 %}".replace('0', userId); $.ajax({ @@ -151,11 +153,6 @@ $(document).ready(function() { }); $('#savePermissions').on('click', function() { - const userId = $(this).data('user-id'); // 从按钮的data-user-id属性中获取用户ID - if (!userId) { - alert('用户ID未设置'); - return; - } const url = "{% url 'save_user_permissions' 0 %}".replace('0', userId); @@ -168,13 +165,51 @@ $(document).ready(function() { 'X-CSRFToken': csrftoken // 添加CSRF令牌 }, success: function(response) { - alert('权限保存成功'); + $('#userPermissionModal').modal('hide'); }, error: function(xhr, status, error) { alert('保存权限时出错'); } }); }); + + $('#refreshPermissions').on('click', function() { + + const url = "{% url 'refresh_user_permissions' 0 %}".replace('0', userId); + + $.ajax({ + url: url, + type: 'POST', + headers: { + 'X-CSRFToken': csrftoken // 添加CSRF令牌 + }, + success: function(response) { + alert('权限已刷新'); + // 重新获取权限列表 + $.ajax({ + url: "{% url 'get_user_existing_permissions' 0 %}".replace('0', userId), + type: 'GET', + success: function(data) { + permissionsData = data.permissions; + modifiedPermissions = {}; // 重置修改的权限项 + currentPage = 1; + renderTable(currentPage); + renderPagination(); + $('#userPermissionModal').modal('show'); + }, + error: function(xhr, status, error) { + alert('获取权限数据失败'); + } + }); + }, + error: function(xhr, status, error) { + alert('刷新权限时出错'); + } + }); + + + }); + });