refactor: 重构权限管理

1.更新字段管理
This commit is contained in:
猿小天
2023-11-20 17:19:20 +08:00
parent 94ad6b1bae
commit 4ac8ed7627
6 changed files with 25 additions and 40 deletions

View File

@@ -179,7 +179,7 @@ class Menu(CoreModel):
ordering = ("sort",)
class MenuField(CoreModel):
model = models.CharField(max_length=64, verbose_name='表名',null=True,blank=True)
model = models.CharField(max_length=64, verbose_name='表名')
menu = models.ForeignKey(to='Menu', on_delete=models.CASCADE, verbose_name='菜单', db_constraint=False)
field_name = models.CharField(max_length=64, verbose_name='模型表字段名')
title = models.CharField(max_length=64, verbose_name='字段显示名')

View File

@@ -16,7 +16,7 @@ from dvadmin.system.views.role_menu import RoleMenuPermissionViewSet
from dvadmin.system.views.role_menu_button_permission import RoleMenuButtonPermissionViewSet
from dvadmin.system.views.system_config import SystemConfigViewSet
from dvadmin.system.views.user import UserViewSet
from dvadmin.system.views.column import ColumnViewSet
from dvadmin.system.views.menu_field import MenuFieldViewSet
system_url = routers.SimpleRouter()
system_url.register(r'menu', MenuViewSet)
@@ -33,7 +33,7 @@ system_url.register(r'system_config', SystemConfigViewSet)
system_url.register(r'message_center', MessageCenterViewSet)
system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet)
system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet)
system_url.register(r'column', ColumnViewSet)
system_url.register(r'column', MenuFieldViewSet)
urlpatterns = [

View File

@@ -11,7 +11,7 @@ from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.json_response import DetailResponse, ErrorResponse, SuccessResponse
class ColumnSerializer(CustomModelSerializer):
class MenuFieldSerializer(CustomModelSerializer):
"""
列权限序列化器
"""
@@ -22,32 +22,24 @@ class ColumnSerializer(CustomModelSerializer):
read_only_fields = ['id']
class ColumnViewSet(CustomModelViewSet):
class MenuFieldViewSet(CustomModelViewSet):
"""
列权限视图集
"""
queryset = MenuField.objects.all()
serializer_class = ColumnSerializer
serializer_class = MenuFieldSerializer
def list(self, request, *args, **kwargs):
app_name = request.query_params.get('app')
model_name = request.query_params.get('model')
menu = request.query_params.get('menu')
if not menu:
return SuccessResponse([])
queryset = self.filter_queryset(self.get_queryset().filter(menu=menu))
# page = self.paginate_queryset(queryset)
# if page is not None:
# serializer = self.get_serializer(page, many=True, request=request)
# return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True, request=request)
return SuccessResponse(data=serializer.data, msg="获取成功")
def create(self, request, *args, **kwargs):
payload = request.data
print(11,get_custom_app_models())
for model in apps.get_models():
print(model.__name__)
if payload.get('model') == model.__name__:
break
else:
@@ -62,34 +54,31 @@ class ColumnViewSet(CustomModelViewSet):
def get_models(self, request):
"""获取所有项目app下的model"""
res = []
for app in get_custom_app_models():
for model in app:
res.append({
'app': model['app'],
'title': model['verbose'],
'key': model['model']
})
for model in get_custom_app_models():
res.append({
'app': model['app'],
'title': model['verbose'],
'key': model['model']
})
return DetailResponse(res)
@action(methods=['POST'], detail=False, permission_classes=[IsAuthenticated])
def auto_match_fields(self, request):
"""自动匹配已有的字段"""
menu_id = request.data.get('menu')
app_name = request.data.get('app')
model_name = request.data.get('model')
if not menu_id or not model_name or not app_name:
if not menu_id or not model_name:
return ErrorResponse( msg='参数错误')
for model in get_custom_app_models(app_name):
for model in get_custom_app_models():
if model['model'] != model_name:
continue
for field in model['fields']:
if MenuField.objects.filter(
menu_id=menu_id, app=app_name, model=model_name, field_name=field['name']
menu_id=menu_id, model=model_name, field_name=field['name']
).exists():
continue
data = {
'menu': menu_id,
'app': app_name,
'model': model_name,
'field_name': field['name'],
'title': str(field['title']),