新功能: 角色授权按钮
This commit is contained in:
@@ -5,7 +5,6 @@
|
|||||||
"sort": 1,
|
"sort": 1,
|
||||||
"status": true,
|
"status": true,
|
||||||
"admin": true,
|
"admin": true,
|
||||||
"data_range": 3,
|
|
||||||
"remark": null
|
"remark": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -14,7 +13,6 @@
|
|||||||
"sort": 2,
|
"sort": 2,
|
||||||
"status": true,
|
"status": true,
|
||||||
"admin": true,
|
"admin": true,
|
||||||
"data_range": 3,
|
|
||||||
"remark": null
|
"remark": null
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -79,20 +79,6 @@ class Role(CoreModel):
|
|||||||
sort = models.IntegerField(default=1, verbose_name="角色顺序", help_text="角色顺序")
|
sort = models.IntegerField(default=1, verbose_name="角色顺序", help_text="角色顺序")
|
||||||
status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态")
|
status = models.BooleanField(default=True, verbose_name="角色状态", help_text="角色状态")
|
||||||
admin = models.BooleanField(default=False, verbose_name="是否为admin", help_text="是否为admin")
|
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:
|
class Meta:
|
||||||
db_table = table_prefix + "system_role"
|
db_table = table_prefix + "system_role"
|
||||||
@@ -121,7 +107,7 @@ class Dept(CoreModel):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@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
|
:param dept_id: 需要获取的id
|
||||||
@@ -136,7 +122,7 @@ class Dept(CoreModel):
|
|||||||
for ele in dept_all_list:
|
for ele in dept_all_list:
|
||||||
if ele.get("parent") == dept_id:
|
if ele.get("parent") == dept_id:
|
||||||
dept_list.append(ele.get("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))
|
return list(set(dept_list))
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
@@ -206,6 +192,40 @@ class MenuButton(CoreModel):
|
|||||||
ordering = ("-name",)
|
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):
|
class Dictionary(CoreModel):
|
||||||
TYPE_LIST = (
|
TYPE_LIST = (
|
||||||
(0, "text"),
|
(0, "text"),
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class RoleInitSerializer(CustomModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = ['name', 'key', 'sort', 'status', 'admin', 'data_range', 'remark',
|
fields = ['name', 'key', 'sort', 'status', 'admin',
|
||||||
'creator', 'dept_belong_id']
|
'creator', 'dept_belong_id']
|
||||||
read_only_fields = ["id"]
|
read_only_fields = ["id"]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<el-tag size="small">{{ scope.row.url }}</el-tag>
|
<el-tag size="small">{{ scope.row.url }}</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</fs-crud>
|
</fs-crud>
|
||||||
|
<RolePermission ref="rolePermission"></RolePermission>
|
||||||
</fs-page>
|
</fs-page>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -12,7 +13,9 @@
|
|||||||
import { ref, onMounted } from 'vue';
|
import { ref, onMounted } from 'vue';
|
||||||
import { useExpose, useCrud } from '@fast-crud/fast-crud';
|
import { useExpose, useCrud } from '@fast-crud/fast-crud';
|
||||||
import { createCrudOptions } from './curd';
|
import { createCrudOptions } from './curd';
|
||||||
|
import RolePermission from '/@/views/system/rolePermission/index.vue'
|
||||||
|
const rolePermission = ref();
|
||||||
|
defineExpose(rolePermission)
|
||||||
// crud组件的ref
|
// crud组件的ref
|
||||||
const crudRef = ref();
|
const crudRef = ref();
|
||||||
// crud 配置的ref
|
// crud 配置的ref
|
||||||
@@ -20,7 +23,7 @@ const crudBinding = ref();
|
|||||||
// 暴露的方法
|
// 暴露的方法
|
||||||
const { crudExpose } = useExpose({ crudRef, crudBinding });
|
const { crudExpose } = useExpose({ crudRef, crudBinding });
|
||||||
// 你的crud配置
|
// 你的crud配置
|
||||||
const { crudOptions } = createCrudOptions({ crudExpose });
|
const { crudOptions } = createCrudOptions({ crudExpose ,rolePermission });
|
||||||
// 初始化crud配置
|
// 初始化crud配置
|
||||||
const { resetCrudOptions } = useCrud({ crudExpose, crudOptions });
|
const { resetCrudOptions } = useCrud({ crudExpose, crudOptions });
|
||||||
// 你可以调用此方法,重新初始化crud配置
|
// 你可以调用此方法,重新初始化crud配置
|
||||||
@@ -30,4 +33,7 @@ const { resetCrudOptions } = useCrud({ crudExpose, crudOptions });
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
crudExpose.doRefresh();
|
crudExpose.doRefresh();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user