!54 列权限管控

Merge pull request !54 from 木子-李/20240701_FieldPermission
This commit is contained in:
dvadmin
2024-07-02 13:19:47 +00:00
committed by Gitee
8 changed files with 47 additions and 17 deletions

View File

@@ -35,6 +35,7 @@ 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', MenuFieldViewSet) system_url.register(r'column', MenuFieldViewSet)
system_url.register(r'login_log', LoginLogViewSet)
urlpatterns = [ urlpatterns = [
@@ -44,8 +45,8 @@ urlpatterns = [
path('system_config/get_association_table/', SystemConfigViewSet.as_view({'get': 'get_association_table'})), path('system_config/get_association_table/', SystemConfigViewSet.as_view({'get': 'get_association_table'})),
path('system_config/get_table_data/<int:pk>/', SystemConfigViewSet.as_view({'get': 'get_table_data'})), path('system_config/get_table_data/<int:pk>/', SystemConfigViewSet.as_view({'get': 'get_table_data'})),
path('system_config/get_relation_info/', SystemConfigViewSet.as_view({'get': 'get_relation_info'})), path('system_config/get_relation_info/', SystemConfigViewSet.as_view({'get': 'get_relation_info'})),
path('login_log/', LoginLogViewSet.as_view({'get': 'list'})), # path('login_log/', LoginLogViewSet.as_view({'get': 'list'})),
path('login_log/<int:pk>/', LoginLogViewSet.as_view({'get': 'retrieve'})), # path('login_log/<int:pk>/', LoginLogViewSet.as_view({'get': 'retrieve'})),
path('dept_lazy_tree/', DeptViewSet.as_view({'get': 'dept_lazy_tree'})), path('dept_lazy_tree/', DeptViewSet.as_view({'get': 'dept_lazy_tree'})),
path('clause/privacy.html', PrivacyView.as_view()), path('clause/privacy.html', PrivacyView.as_view()),
path('clause/terms_service.html', TermsServiceView.as_view()), path('clause/terms_service.html', TermsServiceView.as_view()),

View File

@@ -3,6 +3,7 @@ from django.db.models import Q
from rest_framework import serializers from rest_framework import serializers
from dvadmin.system.models import Area from dvadmin.system.models import Area
from dvadmin.utils.field_permission import FieldPermissionMixin
from dvadmin.utils.json_response import SuccessResponse from dvadmin.utils.json_response import SuccessResponse
from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.viewset import CustomModelViewSet from dvadmin.utils.viewset import CustomModelViewSet
@@ -14,13 +15,16 @@ class AreaSerializer(CustomModelSerializer):
""" """
pcode_count = serializers.SerializerMethodField(read_only=True) pcode_count = serializers.SerializerMethodField(read_only=True)
hasChild = serializers.SerializerMethodField() hasChild = serializers.SerializerMethodField()
def get_pcode_count(self, instance: Area): def get_pcode_count(self, instance: Area):
return Area.objects.filter(pcode=instance).count() return Area.objects.filter(pcode=instance).count()
def get_hasChild(self, instance): def get_hasChild(self, instance):
hasChild = Area.objects.filter(pcode=instance.code) hasChild = Area.objects.filter(pcode=instance.code)
if hasChild: if hasChild:
return True return True
return False return False
class Meta: class Meta:
model = Area model = Area
fields = "__all__" fields = "__all__"
@@ -37,7 +41,7 @@ class AreaCreateUpdateSerializer(CustomModelSerializer):
fields = '__all__' fields = '__all__'
class AreaViewSet(CustomModelViewSet): class AreaViewSet(CustomModelViewSet, FieldPermissionMixin):
""" """
地区管理接口 地区管理接口
list:查询 list:查询
@@ -65,4 +69,3 @@ class AreaViewSet(CustomModelViewSet):
else: else:
queryset = self.queryset.filter(enable=True) queryset = self.queryset.filter(enable=True)
return queryset return queryset

View File

@@ -7,6 +7,7 @@
@Remark: 按钮权限管理 @Remark: 按钮权限管理
""" """
from dvadmin.system.models import LoginLog from dvadmin.system.models import LoginLog
from dvadmin.utils.field_permission import FieldPermissionMixin
from dvadmin.utils.serializers import CustomModelSerializer from dvadmin.utils.serializers import CustomModelSerializer
from dvadmin.utils.viewset import CustomModelViewSet from dvadmin.utils.viewset import CustomModelViewSet
@@ -22,7 +23,7 @@ class LoginLogSerializer(CustomModelSerializer):
read_only_fields = ["id"] read_only_fields = ["id"]
class LoginLogViewSet(CustomModelViewSet): class LoginLogViewSet(CustomModelViewSet, FieldPermissionMixin):
""" """
登录日志接口 登录日志接口
list:查询 list:查询
@@ -33,4 +34,4 @@ class LoginLogViewSet(CustomModelViewSet):
""" """
queryset = LoginLog.objects.all() queryset = LoginLog.objects.all()
serializer_class = LoginLogSerializer serializer_class = LoginLogSerializer
extra_filter_class = [] # extra_filter_class = []

View File

@@ -39,3 +39,9 @@ export function DelObj(id: DelReq) {
data: { id }, data: { id },
}); });
} }
export function GetPermission() {
return request({
url: apiPrefix + 'field_permission/',
method: 'get',
});
}

View File

@@ -5,14 +5,21 @@
</template> </template>
<script lang="ts" setup name="areas"> <script lang="ts" setup name="areas">
import { ref, onMounted } from 'vue'; import { onMounted } from 'vue';
import { useFs } from '@fast-crud/fast-crud'; import { useFs } from '@fast-crud/fast-crud';
import { createCrudOptions } from './crud'; import { createCrudOptions } from './crud';
import { GetPermission } from './api';
import { handleColumnPermission } from '/@/utils/columnPermission';
const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions }); const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
// 页面打开后获取列表数据 // 页面打开后获取列表数据
onMounted(() => { onMounted(async () => {
// 设置列权限
const newOptions = await handleColumnPermission(GetPermission, crudOptions);
//重置crudBinding
resetCrudOptions(newOptions);
// 刷新
crudExpose.doRefresh(); crudExpose.doRefresh();
}); });
</script> </script>

View File

@@ -39,3 +39,10 @@ export function DelObj(id: DelReq) {
data: { id }, data: { id },
}); });
} }
export function GetPermission() {
return request({
url: apiPrefix + 'field_permission/',
method: 'get',
});
}

View File

@@ -5,14 +5,21 @@
</template> </template>
<script lang="ts" setup name="loginLog"> <script lang="ts" setup name="loginLog">
import { ref, onMounted } from 'vue'; import { onMounted } from 'vue';
import { useFs } from '@fast-crud/fast-crud'; import { useFs } from '@fast-crud/fast-crud';
import { createCrudOptions } from './crud'; import { createCrudOptions } from './crud';
import { GetPermission } from './api';
import { handleColumnPermission } from '/@/utils/columnPermission';
const { crudBinding, crudRef, crudExpose } = useFs({ createCrudOptions }); const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
// 页面打开后获取列表数据 // 页面打开后获取列表数据
onMounted(() => { onMounted(async () => {
// 设置列权限
const newOptions = await handleColumnPermission(GetPermission, crudOptions);
//重置crudBinding
resetCrudOptions(newOptions);
// 刷新
crudExpose.doRefresh(); crudExpose.doRefresh();
}); });
</script> </script>

View File

@@ -200,11 +200,9 @@ export const createCrudOptions = function ({crudExpose}: CreateCrudOptionsProps)
component: { component: {
span: 24, span: 24,
props: { props: {
elProps: { allowCreate: true,
allowCreate: true, filterable: true,
filterable: true, clearable: true,
clearable: true,
},
}, },
}, },
itemProps: { itemProps: {