diff --git a/backend/application/settings.py b/backend/application/settings.py index b311baef0a5f12e00aa5f9bdf0580265b8b0a1e5..a26d2835ad140971f96875de2efff1f6d7c3b759 100644 --- a/backend/application/settings.py +++ b/backend/application/settings.py @@ -44,6 +44,9 @@ DEBUG = locals().get("DEBUG", True) ALLOWED_HOSTS = locals().get("ALLOWED_HOSTS", ["*"]) # Application definition +CUSTOM_APPS = [ + "dvadmin.system", +] INSTALLED_APPS = [ "django.contrib.auth", @@ -58,7 +61,7 @@ INSTALLED_APPS = [ "drf_yasg", "captcha", 'channels', - *locals().get("CUSTOM_APPS", []), # 所有项目里写的app需要在env.py文件里的CUSTOM_APPS中 + *locals().get("CUSTOM_APPS", []), # 自定义且需要字段权限控制的app写在上方的CUSTOM_APPS中 ] MIDDLEWARE = [ @@ -96,7 +99,6 @@ WSGI_APPLICATION = "application.wsgi.application" # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases - DATABASES = { "default": { "ENGINE": DATABASE_ENGINE, diff --git a/backend/dvadmin/system/fixtures/initSerializer.py b/backend/dvadmin/system/fixtures/initSerializer.py index fc701bc7c7e76d7c7666889b0c7a09e50634e551..a2d74f6535223f8e0d2aab484a4e16b5c2a19b88 100644 --- a/backend/dvadmin/system/fixtures/initSerializer.py +++ b/backend/dvadmin/system/fixtures/initSerializer.py @@ -128,7 +128,7 @@ class RoleInitSerializer(CustomModelSerializer): class Meta: model = Role - fields = ['name', 'key', 'sort', 'status', 'admin', + fields = ['name', 'key', 'sort', 'status', 'creator', 'dept_belong_id'] read_only_fields = ["id"] extra_kwargs = { diff --git a/backend/dvadmin/system/fixtures/init_role.json b/backend/dvadmin/system/fixtures/init_role.json index 6fb63fe1059d4ba12e4ca8cef39bd9f5cbb94f5d..f1678e57f0ba2692a0e003e1a77ebcc6f40febaa 100644 --- a/backend/dvadmin/system/fixtures/init_role.json +++ b/backend/dvadmin/system/fixtures/init_role.json @@ -4,7 +4,6 @@ "key": "admin", "sort": 1, "status": true, - "admin": true, "remark": null }, { @@ -12,7 +11,6 @@ "key": "public", "sort": 2, "status": true, - "admin": true, "remark": null } ] diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index ed728ea7bbec9c16384f2f01e840d749486d4dea..6d4f4476177c041a3bc26b850ac8f43c533cd709 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -13,7 +13,6 @@ class Role(CoreModel): key = models.CharField(max_length=64, unique=True, verbose_name="权限字符", help_text="权限字符") sort = models.IntegerField(default=1, verbose_name="角色顺序", help_text="角色顺序") status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态") - admin = models.BooleanField(default=False, verbose_name="是否为admin", help_text="是否为admin") class Meta: db_table = table_prefix + "system_role" @@ -184,7 +183,6 @@ class Columns(CoreModel): role = models.ForeignKey(to='Role', on_delete=models.CASCADE, verbose_name='角色', db_constraint=False) app = models.CharField(max_length=64, verbose_name='应用名') 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='字段显示名') is_query = models.BooleanField(default=1, verbose_name='是否可查询') diff --git a/backend/dvadmin/system/views/column.py b/backend/dvadmin/system/views/column.py index a23d27cdb8d7e65ef876f5d5d18ef6704b8281bb..5b9024c56db1b6e8d030ece13f6a38e9227d3c13 100644 --- a/backend/dvadmin/system/views/column.py +++ b/backend/dvadmin/system/views/column.py @@ -32,10 +32,9 @@ class ColumnViewSet(CustomModelViewSet): role_id = request.query_params.get('role') app_name = request.query_params.get('app') model_name = request.query_params.get('model') - menu = request.query_params.get('menu') - if not role_id or not model_name or not app_name or not menu: + if not role_id or not model_name or not app_name: return SuccessResponse([]) - queryset = self.filter_queryset(self.get_queryset().filter(role_id=role_id, model=model_name, app=app_name,menu_id=menu)) + queryset = self.filter_queryset(self.get_queryset().filter(role_id=role_id, model=model_name, app=app_name)) page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True, request=request) diff --git a/backend/dvadmin/system/views/menu.py b/backend/dvadmin/system/views/menu.py index 68996462949e517144a1e2d264f9931d514a60c6..7ac3c40cdc4680d536d4488141633c675ddc137f 100644 --- a/backend/dvadmin/system/views/menu.py +++ b/backend/dvadmin/system/views/menu.py @@ -119,8 +119,7 @@ class MenuViewSet(CustomModelViewSet): def web_router(self, request): """用于前端获取当前角色的路由""" user = request.user - is_admin = user.role.values_list('admin', flat=True) - if user.is_superuser or True in is_admin: + if user.is_superuser: queryset = self.queryset.filter(status=1) else: role_list = user.role.values_list('id', flat=True) diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index 94a65efb1f429cbbe07cd1dd01ef42724dfcccd1..245b34735ecb57c7b0e4ddf9eaac6d9812586e2e 100644 --- a/backend/dvadmin/system/views/menu_button.py +++ b/backend/dvadmin/system/views/menu_button.py @@ -63,8 +63,7 @@ class MenuButtonViewSet(CustomModelViewSet): :return: """ is_superuser = request.user.is_superuser - is_admin = request.user.role.values_list('admin', flat=True) - if is_superuser or True in is_admin: + if is_superuser: queryset = MenuButton.objects.values_list('value',flat=True) else: role_id = request.user.role.values_list('id', flat=True) diff --git a/backend/dvadmin/utils/filters.py b/backend/dvadmin/utils/filters.py index dbd921fa3c3fd1cba3a8de8c6b9b58e4d1f109ba..307de166581d011095c56289692037e8636e883b 100644 --- a/backend/dvadmin/utils/filters.py +++ b/backend/dvadmin/utils/filters.py @@ -86,12 +86,11 @@ class DataLevelPermissionsFilter(BaseFilterBackend): 如果不是超级管理员,则进入下一步权限判断 """ if request.user.is_superuser == 0: - return self._extracted_from_filter_queryset_33(request, queryset, api, method) + return self.filter_dept_queryset(request, queryset, api, method) else: return queryset - # TODO Rename this here and in `filter_queryset` - def _extracted_from_filter_queryset_33(self, request, queryset, api, method): + def filter_dept_queryset(self, request, queryset, api, method): # 0. 获取用户的部门id,没有部门则返回空 user_dept_id = getattr(request.user, "dept_id", None) if not user_dept_id: @@ -121,13 +120,12 @@ class DataLevelPermissionsFilter(BaseFilterBackend): role__status=1, menu_button__api=re_api, menu_button__method=method).values( - 'data_range', - role_admin=F('role__admin') + 'data_range' ) dataScope_list = [] # 权限范围列表 for ele in role_permission_list: # 判断用户是否为超级管理员角色/如果拥有[全部数据权限]则返回所有数据 - if ele.get("data_range") == 3 or ele.get("role_admin") == True: + if ele.get("data_range") == 3: return queryset dataScope_list.append(ele.get("data_range")) dataScope_list = list(set(dataScope_list)) diff --git a/backend/dvadmin/utils/pagination.py b/backend/dvadmin/utils/pagination.py index 52bf143dc579cedc7c2fec0e2e11b7a68028443e..689f7fcae75ebbf8460dd9ab4b2fff97dd6608be 100644 --- a/backend/dvadmin/utils/pagination.py +++ b/backend/dvadmin/utils/pagination.py @@ -80,5 +80,4 @@ class CustomPagination(PageNumberPagination): ('is_next', is_next), ('is_previous', is_previous), ('data', data), - ('permission', self.request.permission_fields) ])) diff --git a/web/src/views/system/columns/index.vue b/web/src/views/system/columns/index.vue index cd7722e12ab29248f97f57ef5e9647f1e9b91ce7..08d13f295d567e88fc1eede162e16ecd44c54d1b 100644 --- a/web/src/views/system/columns/index.vue +++ b/web/src/views/system/columns/index.vue @@ -1,124 +1,99 @@ diff --git a/web/src/views/system/columns/types.ts b/web/src/views/system/columns/types.ts index b41cca87c6b3ee3b575da1cb68dc876d7446ed8a..e36eab73f95118abac6a28428765099d803e5e06 100644 --- a/web/src/views/system/columns/types.ts +++ b/web/src/views/system/columns/types.ts @@ -13,8 +13,6 @@ export interface CurrentInfoType { role: string; model: string; app: string; - - menu: string; } export interface ModelItemType { diff --git a/web/src/views/system/dictionary/subDict/index.vue b/web/src/views/system/dictionary/subDict/index.vue index 65dd40092b13fe6cdaa3046cd7f462875fc92ce0..ab7fdbb5a0ee5b6a2d79e413309289e7bd725bc7 100644 --- a/web/src/views/system/dictionary/subDict/index.vue +++ b/web/src/views/system/dictionary/subDict/index.vue @@ -1,5 +1,5 @@