refactor: 重构权限管理
1.更新字段管理
This commit is contained in:
@@ -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='字段显示名')
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
@@ -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,34 +54,31 @@ 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'],
|
'key': model['model']
|
||||||
'key': model['model']
|
})
|
||||||
})
|
|
||||||
return DetailResponse(res)
|
return DetailResponse(res)
|
||||||
|
|
||||||
@action(methods=['POST'], detail=False, permission_classes=[IsAuthenticated])
|
@action(methods=['POST'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
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']),
|
||||||
@@ -15,16 +15,14 @@ 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
|
|
||||||
if finded:
|
if finded:
|
||||||
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')
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -82,12 +82,9 @@ 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
|
|
||||||
if finded:
|
|
||||||
break
|
break
|
||||||
if finded is False:
|
if finded is False:
|
||||||
return []
|
return []
|
||||||
|
|||||||
Reference in New Issue
Block a user