This commit is contained in:
王思川 2024-06-05 15:39:26 +08:00
parent 44a1bacba5
commit 03ff48830e
3 changed files with 47 additions and 24 deletions

View File

@ -2,8 +2,7 @@ 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
urlpatterns = [
path('login/', auth_views.LoginView.as_view(template_name='accounts/login.html'), name='user_login'),

View File

@ -224,19 +224,40 @@ def save_user_permissions(request, user_id):
except ValueError:
return JsonResponse({'error': 'Invalid JSON data'}, status=400)
# 清空用户的现有权限
user.user_permissions.clear()
# 处理修改后的权限项
for perm_id, perm_changes in permissions_data.get('permissions', {}).items():
try:
permission = Permission.objects.get(id=perm_id)
# 为用户分配新的权限
for perm in permissions_data.get('permissions', []):
permission = Permission.objects.get(id=perm['id'])
if perm.get('add'):
user.user_permissions.add(permission)
if perm.get('delete'):
user.user_permissions.remove(permission)
if perm.get('change'):
user.user_permissions.add(permission)
if perm.get('view'):
user.user_permissions.add(permission)
# 处理“新增”权限
if 'add_permission' in perm_changes:
if perm_changes['add_permission']:
user.user_permissions.add(permission)
else:
user.user_permissions.remove(permission)
# 处理“删除”权限
if 'delete_permission' in perm_changes:
if perm_changes['delete_permission']:
user.user_permissions.add(permission)
else:
user.user_permissions.remove(permission)
# 处理“修改”权限
if 'edit_permission' in perm_changes:
if perm_changes['edit_permission']:
user.user_permissions.add(permission)
else:
user.user_permissions.remove(permission)
# 处理“查看”权限
if 'view_permission' in perm_changes:
if perm_changes['view_permission']:
user.user_permissions.add(permission)
else:
user.user_permissions.remove(permission)
except Permission.DoesNotExist:
continue
return JsonResponse({'success': True, 'message': 'Permissions updated successfully'})

View File

@ -55,6 +55,7 @@ $(document).ready(function() {
const itemsPerPage = 10;
let currentPage = 1;
let permissionsData = [];
let modifiedPermissions = {};
function renderTable(page) {
const start = (page - 1) * itemsPerPage;
@ -139,6 +140,16 @@ $(document).ready(function() {
});
});
// 监听权限复选框的更改
$('#permissionsTable').on('change', 'input[type="checkbox"]', function() {
const permId = $(this).data('id');
const permType = $(this).attr('name');
if (!modifiedPermissions[permId]) {
modifiedPermissions[permId] = {};
}
modifiedPermissions[permId][permType] = $(this).is(':checked');
});
$('#savePermissions').on('click', function() {
const userId = $(this).data('user-id'); // 从按钮的data-user-id属性中获取用户ID
if (!userId) {
@ -148,19 +159,11 @@ $(document).ready(function() {
const url = "{% url 'save_user_permissions' 0 %}".replace('0', userId);
const updatedPermissions = permissionsData.map(perm => ({
id: perm.id,
add: $(`input[name="add_permission"][data-id="${perm.id}"]`).is(':checked'),
delete: $(`input[name="delete_permission"][data-id="${perm.id}"]`).is(':checked'),
change: $(`input[name="edit_permission"][data-id="${perm.id}"]`).is(':checked'),
view: $(`input[name="view_permission"][data-id="${perm.id}"]`).is(':checked')
}));
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ permissions: updatedPermissions }),
data: JSON.stringify({ permissions: modifiedPermissions }),
headers: {
'X-CSRFToken': csrftoken // 添加CSRF令牌
},