Rumah > Java > javaTutorial > Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

WBOY
Lepaskan: 2023-05-13 15:28:15
ke hadapan
1635 orang telah melayarinya

1. Antara muka hadapan

1.1 Butang

Dengan bantuan bahagian jadual dalam elementui

<template slot-scope="scope">
    <el-button @click="permissionClick(scope.row)" type="primary" size="mini">修改权限222</el-button>
</template>
Salin selepas log masuk

1.2 Dialog + kawalan pokok

Dengan bantuan elementui Kotak dialog dan struktur pokok

 <!--自写权限222-->
        <el-dialog
                title="提示"
                :visible.sync="dialogPerVisible"
                width="30%"
                >
            <!--
                :default-expanded-keys="[2, 3]"默认展开项
                :default-checked-keys="[5]"默认选中项
            -->
            <el-tree
                    :data="treeData"
                    show-checkbox
                    node-key="id"
                    :props="defaultProps">
            </el-tree>
            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogPerVisible = false">取 消</el-button>
                <el-button type="primary" @click="dialogPerVisible = false">确 定</el-button>
            </span>
        </el-dialog>
Salin selepas log masuk
 data(){
            return{
                //自写权限树遮罩层
                dialogPerVisible:false,
                treeData:[],
                defaultProps: {
                    children: &#39;children&#39;,
                //如果不显示命名,注意看请求结果是否为label不是则修改‘label&#39;中的内容
                    label: &#39;label&#39;
                }
            }
        }
Salin selepas log masuk
methods:{
            //自写权限点击
            permissionClick(row){
              this.dialogPerVisible=true;
              this.$http.get("/system/permission/findPermessionByRoleId/"+row.id).then(result=>{
                  this.treeData=result.data.data.treeData;
              })
            }
        }
Salin selepas log masuk

2. Operasi Backend

2.1 lapisan pengawal

//自写权限树
    @GetMapping("findPermessionByRoleId/{roleId}")
    public CommonResult findPermessionByRoleId(@PathVariable String roleId){
        return iPermissionService.findPermessionByRoleId(roleId);
    }
Salin selepas log masuk
Salin selepas log masuk

2.2 serviceImpl layer

TODO boleh dilakukan digunakan di sini Semak kemudian untuk melihat sama ada perniagaan ini telah selesai

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

 //自写树结构的获取
    @Override
    public CommonResult findPermessionByRoleId(String roleId) {
        //查询所有的权限
        QueryWrapper<Permission> wrapper=new QueryWrapper<>();
        //逻辑删除列考虑在内 还有一个状态列数据库暂未考虑
        wrapper.eq("is_deleted",0);
        List<Permission> permissionList = permissionMapper.selectList(wrapper);
        //设置层级关系
        List<Permission> firstMenus=new ArrayList<>();
        for (Permission first:permissionList) {
            //int
            if(first.getPid().equals("1")){
                firstMenus.add(first);
            }
        }
        //为一级菜单设置二级菜单
        for (Permission first : firstMenus) {
            //根据一级菜单id 查询 该菜单的二级菜单,如果出现不确定有几级菜单 那么我们可以使用方法的递归调用
            first.setChildren(findChildren(permissionList,first.getId()));
        }
        //TODO根据角色查询该角色具有的权限id
        Map<String,Object> map=new HashMap<>();
        //treeData为前端要接收的值
        map.put("treeData",firstMenus);
        return new CommonResult(2000,"查询成功",map);
    }
    //方法递归
    public void getCheckKey(Permission p,List<String> list){
        if(p.getChildren() == null || p.getChildren().size() == 0){
            list.add(p.getId());
            return;
        }
        List<Permission> children = p.getChildren();
        for (Permission per : children){
            getCheckKey(per, list);
        }
    }
Salin selepas log masuk

2.3 Paparan hasil

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

2.4 Semak menu kebenaran yang sepadan (menggunakan jadual perantaraan)

2.4.1 Pemprosesan bahagian belakang (gema kebenaran)

Gunakan mybatis-plus untuk menjana jadual perantaraan (rolePermission )

Berbanding dengan penambahan sebelumnya yang menanyakan kandungan id kebenaran peranan berdasarkan peranan

//调中间层
    @Autowired
    private IRolePermissionService iRolePermissionService;
    //自写树结构的获取
    @Override
    public CommonResult findPermessionByRoleId(String roleId) {
        //查询所有的权限
        QueryWrapper<Permission> wrapper=new QueryWrapper<>();
        //逻辑删除列考虑在内 还有一个状态列数据库暂未考虑
        wrapper.eq("is_deleted",0);
        List<Permission> permissionList = permissionMapper.selectList(wrapper);
        //设置层级关系
        List<Permission> firstMenus=new ArrayList<>();
        for (Permission first:permissionList) {
            //int
            if(first.getPid().equals("1")){
                firstMenus.add(first);
            }
        }
        //为一级菜单设置二级菜单
        for (Permission first : firstMenus) {
            //根据一级菜单id 查询 该菜单的二级菜单,如果出现不确定有几级菜单 那么我们可以使用方法的递归调用
            first.setChildren(findChildren(permissionList,first.getId()));
        }
        //根据角色查询该角色具有的权限id
        QueryWrapper<RolePermission> wrapper1=new QueryWrapper<>();
        //根据角色id获得权限
        wrapper1.eq("role_id",roleId);
        List<RolePermission> list = iRolePermissionService.list(wrapper1);
        //由集合转换为查询permissionId
        List<String> collect = list.stream().map(item -> item.getPermissionId()).distinct().collect(Collectors.toList());
        Map<String,Object> map=new HashMap<>();
        //treeData为前端要接收的值
        map.put("treeData",firstMenus);
        map.put("checkIds",collect);
        return new CommonResult(2000,"查询成功",map);
    }
    //方法递归
    public void getCheckKey(Permission p,List<String> list){
        if(p.getChildren() == null || p.getChildren().size() == 0){
            list.add(p.getId());
            return;
        }
        List<Permission> children = p.getChildren();
        for (Permission per : children){
            getCheckKey(per, list);
        }
    }
Salin selepas log masuk
2.4.2 Pemprosesan bahagian hadapan

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

methods:{
            //自写权限点击
            permissionClick(row){
              this.dialogPerVisible=true;
              this.$http.get("/system/permission/findPermessionByRoleId/"+row.id).then(result=>{
                  this.treeData=result.data.data.treeData;
                  setTimeout(()=>{
                      result.data.data.checkIds.forEach(value=>{
                          this.$refs.rootTree.setChecked(value,true,false);
                      })
                  },100)
              })
            }
}
Salin selepas log masuk

Klik pemprosesan pengesahan lapisan topeng

<el-button type="primary" @click="confirmFen()">确 定</el-button>
Salin selepas log masuk

Tambah id aksara

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

Apabila anda klik OK

 methods:{
            //自写权限遮罩层确定
            confirmFen(){
                //1.获取全选和半选的树 获取对象
               var checkedNodes = this.$refs.rootTree.getCheckedNodes(false,true);
               //console.log(checkedNodes)
                var ids=[];
                checkedNodes.forEach(item=>{
                    ids.push(item.id);
                })
                //console.log(ids)
                this.$http.post("/system/rolePermission/"+this.roleId,ids).then(result=>{
                    if(result.data.code===2000){
                        this.dialogPerVisible=false;
                        this.$message.success("分配权限成功");
                    }
                })
            }
}
Salin selepas log masuk

The hasil dicetak oleh console.log (id kedua)

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

2.4.3 Pemprosesan bahagian belakang (tentukan kebenaran pengubahsuaian)

lapisan pengawal

//自写权限树
    @GetMapping("findPermessionByRoleId/{roleId}")
    public CommonResult findPermessionByRoleId(@PathVariable String roleId){
        return iPermissionService.findPermessionByRoleId(roleId);
    }
Salin selepas log masuk
Salin selepas log masuk

lapisan serviceImpl

 @Override
    @Transactional//事务
    public CommonResult fen(String roleId, List<String> ids) {
        //删除roleid对应的权限
        QueryWrapper<RolePermission> wrapper=new QueryWrapper<>();
        wrapper.eq("role_id",roleId);
        this.remove(wrapper);
        //添加
        List<RolePermission> collect = ids.stream().map(item -> new RolePermission(null, roleId, item, 0, LocalDateTime.now(), LocalDateTime.now())).collect(Collectors.toList());
        this.saveBatch(collect);
        return new CommonResult(2000,"分配成功",null);
    }
Salin selepas log masuk

kelas entiti ditambah

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

Kelas permulaan ditambah

Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?

Atas ialah kandungan terperinci Apakah kaedah pengurusan kebenaran dalam pemisahan bahagian depan dan belakang Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan