Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
liqiang
2025-03-21 04:09:33 +08:00
3 changed files with 26 additions and 19 deletions

View File

@@ -70,13 +70,13 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
# 全部以可见字段为准 # 全部以可见字段为准
can_see = self.get_menu_field(serializer_class) can_see = self.get_menu_field(serializer_class)
# 排除掉序列化器级的字段(排除字段权限中未授权的字段) # 排除掉序列化器级的字段(排除字段权限中未授权的字段)
if not self.request.user.is_superuser: # if not self.request.user.is_superuser:
exclude_set = set(serializer_class._declared_fields.keys()) - set(can_see) # exclude_set = set(serializer_class._declared_fields.keys()) - set(can_see)
for field in exclude_set: # for field in exclude_set:
serializer_class._declared_fields.pop(field) # serializer_class._declared_fields.pop(field)
meta = copy.deepcopy(serializer_class.Meta) # meta = copy.deepcopy(serializer_class.Meta)
meta.fields = list(can_see) # meta.fields = list(can_see)
serializer_class.Meta = meta # serializer_class.Meta = meta
# 在分页器中使用 # 在分页器中使用
self.request.permission_fields = can_see self.request.permission_fields = can_see
if isinstance(self.request.data, list): if isinstance(self.request.data, list):
@@ -87,16 +87,17 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
def get_menu_field(self, serializer_class): def get_menu_field(self, serializer_class):
"""获取字段权限""" """获取字段权限"""
finded = False
for model in get_custom_app_models(): if not any(model['object'] is serializer_class.Meta.model for model in get_custom_app_models()):
if model['object'] is serializer_class.Meta.model:
finded = True
break
if finded is False:
return [] return []
roles = self.request.user.role.values_list('id', flat=True)
return FieldPermission.objects.filter(is_query=True, role__in=roles, field__model=model['model']).values_list( # 匿名用户没有角色
'field__field_name', flat=True) ret = FieldPermission.objects.filter(field__model=serializer_class.Meta.model.__name__)
if hasattr(self.request.user, 'role'):
roles = self.request.user.role.values_list('id', flat=True)
ret = ret.filter(is_query=True, role__in=roles)
return ret.values_list('field__field_name', flat=True)
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, request=request) serializer = self.get_serializer(data=request.data, request=request)

View File

@@ -2,7 +2,8 @@ import { CrudOptions, AddReq, DelReq, EditReq, dict, CrudExpose, compute } from
import * as api from './api'; import * as api from './api';
import { dictionary } from '/@/utils/dictionary'; import { dictionary } from '/@/utils/dictionary';
import { successMessage } from '../../../utils/message'; import { successMessage } from '../../../utils/message';
import { auth } from '/@/utils/authFunction' import { auth } from '/@/utils/authFunction';
import { getBaseURL } from '/@/utils/baseUrl';
interface CreateCrudOptionsTypes { interface CreateCrudOptionsTypes {
output: any; output: any;
@@ -27,7 +28,6 @@ export const createCrudOptions = function ({ crudExpose }: { crudExpose: CrudExp
//权限判定 //权限判定
// @ts-ignore
// @ts-ignore // @ts-ignore
return { return {
crudOptions: { crudOptions: {
@@ -72,7 +72,7 @@ export const createCrudOptions = function ({ crudExpose }: { crudExpose: CrudExp
show: compute(ctx => ctx.row.task_status === 2), show: compute(ctx => ctx.row.task_status === 2),
text: '下载文件', text: '下载文件',
type: 'warning', type: 'warning',
click: (ctx) => window.open(ctx.row.url, '_blank') click: (ctx) => window.open(getBaseURL(ctx.row.url), '_blank')
} }
}, },
}, },

View File

@@ -11,6 +11,7 @@ import {
dict dict
} from '@fast-crud/fast-crud'; } from '@fast-crud/fast-crud';
import fileSelector from '/@/components/fileSelector/index.vue'; import fileSelector from '/@/components/fileSelector/index.vue';
import { getBaseURL } from '/@/utils/baseUrl';
export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
const pageRequest = async (query: UserPageQuery) => { const pageRequest = async (query: UserPageQuery) => {
@@ -146,6 +147,11 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
}, },
column: { column: {
minWidth: 360, minWidth: 360,
component: {
async buildUrl(value: any) {
return getBaseURL(value);
}
}
}, },
}, },
md5sum: { md5sum: {