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",) ordering = ("sort",)
class MenuField(CoreModel): 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) menu = models.ForeignKey(to='Menu', on_delete=models.CASCADE, verbose_name='菜单', db_constraint=False)
field_name = models.CharField(max_length=64, verbose_name='模型表字段名') field_name = models.CharField(max_length=64, verbose_name='模型表字段名')
title = 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.role_menu_button_permission import RoleMenuButtonPermissionViewSet
from dvadmin.system.views.system_config import SystemConfigViewSet from dvadmin.system.views.system_config import SystemConfigViewSet
from dvadmin.system.views.user import UserViewSet 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 = routers.SimpleRouter()
system_url.register(r'menu', MenuViewSet) 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'message_center', MessageCenterViewSet)
system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet) system_url.register(r'role_menu_button_permission', RoleMenuButtonPermissionViewSet)
system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet) system_url.register(r'role_menu_permission', RoleMenuPermissionViewSet)
system_url.register(r'column', ColumnViewSet) system_url.register(r'column', MenuFieldViewSet)
urlpatterns = [ urlpatterns = [

View File

@@ -11,7 +11,7 @@ from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.json_response import DetailResponse, ErrorResponse, SuccessResponse 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'] read_only_fields = ['id']
class ColumnViewSet(CustomModelViewSet): class MenuFieldViewSet(CustomModelViewSet):
""" """
列权限视图集 列权限视图集
""" """
queryset = MenuField.objects.all() queryset = MenuField.objects.all()
serializer_class = ColumnSerializer serializer_class = MenuFieldSerializer
def list(self, request, *args, **kwargs): 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') menu = request.query_params.get('menu')
if not menu: if not menu:
return SuccessResponse([]) return SuccessResponse([])
queryset = self.filter_queryset(self.get_queryset().filter(menu=menu)) 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) serializer = self.get_serializer(queryset, many=True, request=request)
return SuccessResponse(data=serializer.data, msg="获取成功") return SuccessResponse(data=serializer.data, msg="获取成功")
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
payload = request.data payload = request.data
print(11,get_custom_app_models())
for model in apps.get_models(): for model in apps.get_models():
print(model.__name__)
if payload.get('model') == model.__name__: if payload.get('model') == model.__name__:
break break
else: else:
@@ -62,8 +54,7 @@ class ColumnViewSet(CustomModelViewSet):
def get_models(self, request): def get_models(self, request):
"""获取所有项目app下的model""" """获取所有项目app下的model"""
res = [] res = []
for app in get_custom_app_models(): for model in get_custom_app_models():
for model in app:
res.append({ res.append({
'app': model['app'], 'app': model['app'],
'title': model['verbose'], 'title': model['verbose'],
@@ -75,21 +66,19 @@ class ColumnViewSet(CustomModelViewSet):
def auto_match_fields(self, request): def auto_match_fields(self, request):
"""自动匹配已有的字段""" """自动匹配已有的字段"""
menu_id = request.data.get('menu') menu_id = request.data.get('menu')
app_name = request.data.get('app')
model_name = request.data.get('model') 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='参数错误') return ErrorResponse( msg='参数错误')
for model in get_custom_app_models(app_name): for model in get_custom_app_models():
if model['model'] != model_name: if model['model'] != model_name:
continue continue
for field in model['fields']: for field in model['fields']:
if MenuField.objects.filter( 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(): ).exists():
continue continue
data = { data = {
'menu': menu_id, 'menu': menu_id,
'app': app_name,
'model': model_name, 'model': model_name,
'field_name': field['name'], 'field_name': field['name'],
'title': str(field['title']), 'title': str(field['title']),

View File

@@ -15,8 +15,7 @@ class FieldPermissionMixin:
获取字段权限 获取字段权限
""" """
finded = False finded = False
for app in get_custom_app_models(): for model in get_custom_app_models():
for model in app:
if model['object'] is self.serializer_class.Meta.model: if model['object'] is self.serializer_class.Meta.model:
finded = True finded = True
break break
@@ -24,7 +23,6 @@ class FieldPermissionMixin:
break break
if finded is False: if finded is False:
return [] return []
print(266666,model)
user = request.user user = request.user
if user.is_superuser==1: if user.is_superuser==1:
data = MenuField.objects.filter( model=model['model']).values('field_name') data = MenuField.objects.filter( model=model['model']).values('field_name')

View File

@@ -141,6 +141,7 @@ def get_custom_app_models(app_name=None):
return get_model_from_app(app_name) return get_model_from_app(app_name)
res = [] res = []
for app in settings.CUSTOM_APPS: for app in settings.CUSTOM_APPS:
# print(222,get_model_from_app(app)) all_models = get_model_from_app(app)
res.append(get_model_from_app(app)) for model in all_models:
res.append(model)
return res return res

View File

@@ -82,13 +82,10 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
def get_menu_field(self, serializer_class): def get_menu_field(self, serializer_class):
"""获取字段权限""" """获取字段权限"""
finded = False finded = False
for app in get_custom_app_models(): for model in get_custom_app_models():
for model in app:
if model['object'] is serializer_class.Meta.model: if model['object'] is serializer_class.Meta.model:
finded = True finded = True
break break
if finded:
break
if finded is False: if finded is False:
return [] return []
return MenuField.objects.filter(model=model['model'] return MenuField.objects.filter(model=model['model']