From 2e94c88b634368a7fba75fc8cbb25b0c20618ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Fri, 3 Feb 2023 19:26:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD:=20=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=8E=88=E6=9D=83=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dvadmin/system/fixtures/init_role.json | 2 - backend/dvadmin/system/models.py | 52 +++++++++++++------ backend/dvadmin/system/views/role.py | 2 +- web/src/views/system/role/index.vue | 10 +++- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/backend/dvadmin/system/fixtures/init_role.json b/backend/dvadmin/system/fixtures/init_role.json index 911f7ca..6fb63fe 100644 --- a/backend/dvadmin/system/fixtures/init_role.json +++ b/backend/dvadmin/system/fixtures/init_role.json @@ -5,7 +5,6 @@ "sort": 1, "status": true, "admin": true, - "data_range": 3, "remark": null }, { @@ -14,7 +13,6 @@ "sort": 2, "status": true, "admin": true, - "data_range": 3, "remark": null } ] diff --git a/backend/dvadmin/system/models.py b/backend/dvadmin/system/models.py index d471438..1ffa0b6 100644 --- a/backend/dvadmin/system/models.py +++ b/backend/dvadmin/system/models.py @@ -79,20 +79,6 @@ class Role(CoreModel): 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") - DATASCOPE_CHOICES = ( - (0, "仅本人数据权限"), - (1, "本部门及以下数据权限"), - (2, "本部门数据权限"), - (3, "全部数据权限"), - (4, "自定数据权限"), - ) - data_range = models.IntegerField(default=0, choices=DATASCOPE_CHOICES, verbose_name="数据权限范围", help_text="数据权限范围") - remark = models.TextField(verbose_name="备注", help_text="备注", null=True, blank=True) - dept = models.ManyToManyField(to="Dept", verbose_name="数据权限-关联部门", db_constraint=False, help_text="数据权限-关联部门") - menu = models.ManyToManyField(to="Menu", verbose_name="关联菜单", db_constraint=False, help_text="关联菜单") - permission = models.ManyToManyField( - to="MenuButton", verbose_name="关联菜单的接口按钮", db_constraint=False, help_text="关联菜单的接口按钮" - ) class Meta: db_table = table_prefix + "system_role" @@ -121,7 +107,7 @@ class Dept(CoreModel): ) @classmethod - def recursion_dept_info(cls, dept_id: int, dept_all_list=None, dept_list=None): + def recursion_all_dept(cls, dept_id: int, dept_all_list=None, dept_list=None): """ 递归获取部门的所有下级部门 :param dept_id: 需要获取的id @@ -136,7 +122,7 @@ class Dept(CoreModel): for ele in dept_all_list: if ele.get("parent") == dept_id: dept_list.append(ele.get("id")) - cls.recursion_dept_info(ele.get("id"), dept_all_list, dept_list) + cls.recursion_all_dept(ele.get("id"), dept_all_list, dept_list) return list(set(dept_list)) class Meta: @@ -206,6 +192,40 @@ class MenuButton(CoreModel): ordering = ("-name",) +class RoleMenuButtonPermission(CoreModel): + role = models.ForeignKey( + to="Role", + db_constraint=False, + related_name="role_menu_button", + on_delete=models.CASCADE, + verbose_name="关联角色", + help_text="关联角色", + ) + menu_button = models.ForeignKey( + to="MenuButton", + db_constraint=False, + related_name="menu_button_permission", + on_delete=models.CASCADE, + verbose_name="关联菜单按钮", + help_text="关联菜单按钮", + ) + DATASCOPE_CHOICES = ( + (0, "仅本人数据权限"), + (1, "本部门及以下数据权限"), + (2, "本部门数据权限"), + (3, "全部数据权限"), + (4, "自定数据权限"), + ) + data_range = models.IntegerField(default=0, choices=DATASCOPE_CHOICES, verbose_name="数据权限范围", + help_text="数据权限范围") + dept = models.ManyToManyField(to="Dept", verbose_name="数据权限-关联部门", db_constraint=False, + help_text="数据权限-关联部门") + class Meta: + db_table = table_prefix + "role_menu_button_permission" + verbose_name = "角色菜单权限表" + verbose_name_plural = verbose_name + ordering = ("-create_datetime",) + class Dictionary(CoreModel): TYPE_LIST = ( (0, "text"), diff --git a/backend/dvadmin/system/views/role.py b/backend/dvadmin/system/views/role.py index 727e355..35ea394 100644 --- a/backend/dvadmin/system/views/role.py +++ b/backend/dvadmin/system/views/role.py @@ -38,7 +38,7 @@ class RoleInitSerializer(CustomModelSerializer): class Meta: model = Role - fields = ['name', 'key', 'sort', 'status', 'admin', 'data_range', 'remark', + fields = ['name', 'key', 'sort', 'status', 'admin', 'creator', 'dept_belong_id'] read_only_fields = ["id"] extra_kwargs = { diff --git a/web/src/views/system/role/index.vue b/web/src/views/system/role/index.vue index d2ff9e0..5cae97c 100644 --- a/web/src/views/system/role/index.vue +++ b/web/src/views/system/role/index.vue @@ -5,6 +5,7 @@ {{ scope.row.url }} + @@ -12,7 +13,9 @@ import { ref, onMounted } from 'vue'; import { useExpose, useCrud } from '@fast-crud/fast-crud'; import { createCrudOptions } from './curd'; - +import RolePermission from '/@/views/system/rolePermission/index.vue' +const rolePermission = ref(); +defineExpose(rolePermission) // crud组件的ref const crudRef = ref(); // crud 配置的ref @@ -20,7 +23,7 @@ const crudBinding = ref(); // 暴露的方法 const { crudExpose } = useExpose({ crudRef, crudBinding }); // 你的crud配置 -const { crudOptions } = createCrudOptions({ crudExpose }); +const { crudOptions } = createCrudOptions({ crudExpose ,rolePermission }); // 初始化crud配置 const { resetCrudOptions } = useCrud({ crudExpose, crudOptions }); // 你可以调用此方法,重新初始化crud配置 @@ -30,4 +33,7 @@ const { resetCrudOptions } = useCrud({ crudExpose, crudOptions }); onMounted(() => { crudExpose.doRefresh(); }); + + +