传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为每个人都要单独去设置权限
RBAC的权限模型 基于角色的权限分配来解决,有中间层的角色 ,可以让权限管理进行多元化的处理
RBAC实现了用户和权限点的分离,想对某个用户设置权限,只需要对该用户设置相应的角色即可,而该角色就拥有了对应的权限,这样一来,权限的分配和设计就做到了极简,高效,当想对用户收回权限时,只需要收回角色即可
一个用户可以有多个角色
创建角色的窗体
<template>
<el-dialog title="分配角色" :visible="showRoleDialog">
<!-- el-checkbox-group选中的是 当前用户所拥有的角色 需要绑定 当前用户拥有的角色-->
<el-checkbox-group>
<!-- 选项 -->
</el-checkbox-group>
<el-row slot="footer" type="flex" justify="center">
<el-col :span="6">
<el-button type="primary" size="small">确定</el-button>
<el-button size="small">取消</el-button>
</el-col>
</el-row>
</el-dialog>
</template>
<script>
export default {
props: {
showRoleDialog: {
type: Boolean,
default: false
},
// 用户的id 用来查询当前用户的角色信息
userId: {
type: String,
default: null
}
}
}
</script>
发送请求得到所有角色的信息,在获取当前的角色信息 进行信息的渲染
点击角色弹出选项框
//注册
import assignRole from './components/assign-role.vue' // 导入组件
components: {
...,
assignRole // 注册组件
},
data(){
return {
userId:null // 用户id
}
}
//-----------------------------
<!-- 放置角色分配组件 -->
<assign-role ref="assignRole" :show-role-dialog.sync="showRoleDialog" :user-id="userId" />
//-------------------
// 编辑角色
async editRole(id) {
this.userId = id // props传值 是异步的
await this.$refs.assignRole.getUserDetailById(id) // 父组件调用子组件方法
this.showRoleDialog = true
}
//---<!-- 按钮调用 -->
<el-button type="text" size="small" @click="editRole(row.id)">角色</el-button>
然后给员工分配角色
封装请求后
//确定保存
async btnOK() {
await assignRoles({ id: this.userId, roleIds: this.roleIds })
this.$message.success('设置成功')
// 关闭窗体
this.$emit('update:showRoleDialog', false)
},
//取消按钮
btnCancel() {
this.roleIds = [] // 清空原来的数组
this.$emit('update:showRoleDialog', false)
}