This commit is contained in:
王思川 2024-06-05 16:31:01 +08:00
parent 03ff48830e
commit c648e0c22e
3 changed files with 69 additions and 20 deletions

View File

@ -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/<int:user_id>/', get_user_existing_permissions, name='get_user_existing_permissions'),
path('save_user_permissions/<int:user_id>/', save_user_permissions, name='save_user_permissions'),
path("refresh_user_permissions/<int:user_id>/", refresh_user_permissions, name="refresh_user_permissions"),
]

View File

@ -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'})

View File

@ -28,6 +28,7 @@
<button id="prevPage" class="btn btn-secondary" type="button">上一页</button>
<button id="nextPage" class="btn btn-secondary" type="button">下一页</button>
</div>
<button type="button" class="btn btn-secondary" id="refreshPermissions" data-user-id="">刷新权限</button>
<button type="button" class="btn btn-primary" id="savePermissions" data-user-id="">保存更改</button>
</div>
</div>
@ -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('刷新权限时出错');
}
});
});
});
</script>