Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
Reference in New Issue
Block a user