生涯
生涯
  • 发布:2021-02-26 11:31
  • 更新:2021-03-02 17:05
  • 阅读:1990

uniCloud-admin后台管理注册新管理员,登陆及权限问题

分类:uniCloud

1.通过uni-id用户体系,首先添加了权限


2.然后添加了角色

3.然后注册了新的管理账号

4.为了测试我尝试在商品列表里面手动添加了权限

5.然后我尝试登陆提示禁止访问

求明白人帮我看一下,解答一下,谢谢

2021-02-26 11:31 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
生涯

生涯 (作者) - 自学成才

是我描述的模糊不清还是问题不存在价值,大佬指点一下

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

YUN_YING这个角色有什么权限呢?你期望什么表现?

  • 生涯 (作者)

    YUN_YING这个角色现在的权限是后台管理所有页面可读,不能做修改删除的操作,我现在主要是想问的,通过uni-id注册的账号,在后台管理无法登录,提示禁止访问,这是我想解决的主要问题。

    2021-03-02 09:35

  • DCloud_uniCloud_WYQ

    回复 生涯: 没有可访问菜单的时候会提示禁止访问

    2021-03-02 09:42

  • 生涯 (作者)

    回复 DCloud_uniCloud_WYQ: 请看一下我下面发的图片

    2021-03-02 10:01

生涯

生涯 (作者) - 自学成才


这是可访问菜单

这是注册的管理员账号

这是角色所包含的权限,登陆 就会提示 禁止访问

  • DCloud_uniCloud_WYQ

    你登录用的账号的角色是YUN_YING啊,你这个图里面ADMIN_USER也没法登录吗?

    2021-03-02 16:14

  • 生涯 (作者)

    回复 DCloud_uniCloud_WYQ: 是的,仍然提示禁止访问

    2021-03-02 16:19

  • 生涯 (作者)

    跟版本有关系吗?我使用的uniCloud-admin版本是1.0.0

    2021-03-02 16:25

  • 生涯 (作者)

    回复 DCloud_uniCloud_WYQ: 下面我贴出了添加权限、添加角色、注册管理员账号的前端页面代码和云函数代码

    2021-03-03 08:35

  • DCloud_uniCloud_WYQ

    回复 生涯: 可以自己先连接本地云函数调试一下

    2021-03-03 11:09

  • 生涯 (作者)

    回复 DCloud_uniCloud_WYQ: 哎呀,新版本都自带现成的了,我还自己闷着头搞~~~,原来1.0.0版本的我怎么跑也不会跑通啊!!!

    2021-03-04 16:41

生涯

生涯 (作者) - 自学成才

<template>  
    <view class="content">  
        <el-row :gutter="20">  
            <el-col :span="2">  
                <el-button type="success" size="small" @click="openRegisterFun()">注册新管理</el-button>  
            </el-col>  
            <el-col :span="2">  
                <el-button type="primary" size="small" @click="openNewRoleFun()">添加新角色</el-button>  
            </el-col>  
            <el-col :span="2">  
                <el-button type="warning" size="small" @click="openNewPermissionsFun()">添加新权限</el-button>  
            </el-col>  
        </el-row>  

        <el-row :gutter="20" style="margin-top: 20px;">  
            <el-table :data="adminUserList" style="width: 100%" border :stripe="true" size="small" max-height="700">  
                <el-table-column prop="username" label="账号" width="180"></el-table-column>  
                <el-table-column prop="adminName" label="角色" width="180"></el-table-column>  
                <el-table-column label="操作" width="280">  
                    <template slot-scope="scope">  
                        <el-button type="primary" size="small" @click="cancelPermissionsFun(scope.row)">取消关联</el-button>  
                        <el-button type="warning" size="small" @click="cancelPermissionsFun(scope.row)">取消关联</el-button>  
                    </template>  
                </el-table-column>  
            </el-table>  
        </el-row>  

        <!-- 注册窗口 -->  
        <el-dialog title="注册新管理" :visible.sync="registerBoolean" width="30%" :before-close="handleClose">  
            <el-form ref="registerData" :model="registerData" label-width="100px">  
                <el-form-item label="账号">  
                    <el-input v-model="registerData.username"></el-input>  
                </el-form-item>  
                <el-form-item label="密码">  
                    <el-input v-model="registerData.password"></el-input>  
                </el-form-item>  
                <el-form-item label="备注">  
                    <el-input v-model="registerData.myInviteCode"></el-input>  
                </el-form-item>  
                <el-form-item label="角色">  
                    <el-select v-model="newRoleDataValue" placeholder="请选择角色" @change="newRoleDataValueFun">  
                        <el-option v-for="item in newRoleDataList" :key="item.role_id" :label="item.role_name" :value="item.role_id"></el-option>  
                    </el-select>  
                </el-form-item>  
            </el-form>  
            <span slot="footer" class="dialog-footer">  
                <el-button @click="registerBoolean = false">取 消</el-button>  
                <el-button type="primary" @click="addRegisterFun()">确 定</el-button>  
            </span>  
        </el-dialog>  
        <!-- 注册窗口 结束 -->  

        <!-- 添加新权限 -->  
        <el-dialog title="添加新权限" :visible.sync="newPermissionsBoolean" width="30%" :before-close="handleClose">  
            <el-form ref="newPermissionsData" :model="newPermissionsData" label-width="100px">  
                <el-form-item label="唯一标识">  
                    <el-input v-model="newPermissionsData.permissionID"></el-input>  
                </el-form-item>  
                <el-form-item label="权限名称">  
                    <el-input v-model="newPermissionsData.permissionName"></el-input>  
                </el-form-item>  
                <el-form-item label="备注">  
                    <el-input v-model="newPermissionsData.comment"></el-input>  
                </el-form-item>  
            </el-form>  
            <span slot="footer" class="dialog-footer">  
                <el-button @click="newPermissionsBoolean = false">取 消</el-button>  
                <el-button type="primary" @click="addNewPermissionsFun()">确 定</el-button>  
            </span>  
        </el-dialog>  
        <!-- 添加新权限 结束 -->  

        <!-- 添加新角色 -->  
        <el-dialog title="添加新角色" :visible.sync="newRoleBoolean" width="60%" :before-close="handleClose">  
            <el-form ref="newRoleData" :model="newRoleData" label-width="100px">  
                <el-form-item label="唯一标识">  
                    <el-input v-model="newRoleData.roleID"></el-input>  
                    <div style="font-size: 14px;color: #FF4D51;">*建议以大写英文加下划线 _ 命名,例如:“ YUN_YING ”</div>  
                </el-form-item>  
                <el-form-item label="角色名称">  
                    <el-input v-model="newRoleData.roleName"></el-input>  
                </el-form-item>  
                <el-form-item label="备注">  
                    <el-input v-model="newRoleData.comment"></el-input>  
                </el-form-item>  
                <el-form-item label="权限列表">  
                    <el-row :gutter="20">  
                        <el-col :span="11">  
                            <el-alert title="已添加权限" type="success" effect="dark" size="small"></el-alert>  
                            <el-table :data="newPermissionsDataListL" style="width: 100%" border :stripe="true" size="small" max-height="350">  
                                <el-table-column prop="permission_name" label="权限名称"></el-table-column>  
                                <el-table-column label="操作" width="180">  
                                    <template slot-scope="scope">  
                                        <el-button type="primary" size="small" @click="cancelPermissionsFun(scope.row)">取消关联</el-button>  
                                    </template>  
                                </el-table-column>  
                            </el-table>  
                        </el-col>  
                        <el-col :span="11">  
                            <el-alert title="所有权限" type="warning" effect="dark" size="small"></el-alert>  
                            <el-table :data="newPermissionsDataList" style="width: 100%" border :stripe="true" size="small" max-height="350">  
                                <el-table-column prop="permission_name" label="权限名称"></el-table-column>  
                                <el-table-column label="操作" width="180">  
                                    <template slot-scope="scope">  
                                        <el-button type="warning" size="small" @click="relationPermissionsFun(scope.row)">关联该权限</el-button>  
                                    </template>  
                                </el-table-column>  
                            </el-table>  
                        </el-col>  
                    </el-row>  
                </el-form-item>  
            </el-form>  
            <span slot="footer" class="dialog-footer">  
                <el-button @click="newRoleBoolean = false">取 消</el-button>  
                <el-button type="primary" @click="addNewRoleFun()">确 定</el-button>  
            </span>  
        </el-dialog>  
        <!-- 添加新角色 结束 -->  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                // 注册窗口布尔值  
                registerBoolean: false,  
                registerData: {  
                    username: '',  
                    password: '',  
                    myInviteCode: '',  
                    needPermission: true,  
                    role: []  
                },  
                // 添加新权限  
                newPermissionsBoolean: false,  
                newPermissionsData: {  
                    permissionID: '',  
                    permissionName: '',  
                    comment: ''  
                },  
                newPermissionsDataList: [],  
                newPermissionsDataListL: [],  
                // 添加新角色  
                newRoleBoolean: false,  
                newRoleData: {  
                    roleID: '',  
                    roleName: '',  
                    comment: '',  
                    permission: []  
                },  
                newRoleDataList: [],  
                newRoleDataValue: '',  
                // 管理员列表  
                adminUserList: []  
            }  
        },  
        onLoad() {  
            // 获取管理员列表  
            this.getAdminUserFun()  
        },  
        methods: {  
            // 获取管理员列表  
            getAdminUserFun() {  
                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'getAdminUser'  
                    },  
                    success: (res) => {  
                        console.log(res)  
                        let resData = res.result.list.data  
                            resData.splice(0,1)  
                        let roleList = res.result.roleList.roleList  
                        let permissionList = res.result.permissionList.permissionList  
                        for (let i = 0; i < roleList.length; i++) {  
                            for (let a = 0; a < resData.length; a++) {  
                                if (resData[a].role[0] == roleList[i].role_id) {  
                                    resData[a].adminName = roleList[i].role_name  
                                }  
                            }  
                        }  
                        this.adminUserList = resData  
                        console.log(resData)  
                        this.$message.success('获取管理员列表成功')  
                    },  
                    fail: (err) => {  
                        console.log(err)  
                        this.$message.error('获取管理员列表失败')  
                    }  
                })  
            },  
            // 打开 注册新管理  
            openRegisterFun() {  
                this.newRoleDataValue = ''  
                // 获取所有角色  
                this.getNewRoleDataListFun()  
                this.registerData.username = ''  
                this.registerData.password = ''  
                this.registerBoolean = true  
            },  
            // 打开 添加新角色  
            openNewRoleFun() {  
                // 获取权限列表  
                this.getNewPermissionsFun()  
                this.newRoleData.roleID = ''  
                this.newRoleData.roleName = ''  
                this.newRoleData.comment = ''  
                this.newRoleData.permission = []  
                this.newPermissionsDataListL = []  
                this.newRoleBoolean = true  
            },  
            // 打开 添加新权限  
            openNewPermissionsFun() {  
                this.newPermissionsData.permissionID = ''  
                this.newPermissionsData.permissionName = ''  
                this.newPermissionsData.comment = ''  
                this.newPermissionsBoolean = true  
            },  
            handleClose(done) {  
                this.$confirm('确认关闭?')  
                    .then(_ => {  
                        done();  
                    })  
                    .catch(_ => {});  
            },  
            // 角色选择  
            newRoleDataValueFun(e) {  
                this.registerData.role = []  
                this.registerData.role.push(this.newRoleDataValue)  
                console.log(this.registerData.role)  
            },  
            // 角色关联 权限  
            relationPermissionsFun(row) {  
                console.log(row)  
                if (this.newRoleData.permission.length === 0) {  
                    this.newRoleData.permission.push(row.permission_id)  
                    this.newPermissionsDataListL.push(row)  
                } else{  
                    let index = 0  
                    for (let i = 0; i < this.newRoleData.permission.length; i++) {  
                        if (this.newRoleData.permission[i].indexOf(row.permission_id) !== -1) {  
                            index = 1  
                        }  
                    }  
                    if (index == 0) {  
                        this.newRoleData.permission.push(row.permission_id)  
                        this.newPermissionsDataListL.push(row)  
                    } else {  
                        this.$message.error('已存在')  
                    }  
                }  
            },  
            // 取消角色 关联权限  
            cancelPermissionsFun(row) {  
                console.log(row)  
                for (let i = 0; i < this.newPermissionsDataListL.length; i++) {  
                    if (this.newPermissionsDataListL[i].permission_id == row.permission_id) {  
                        this.newPermissionsDataListL.splice(i,1)  
                        this.newRoleData.permission.splice(i,1)  
                    }  
                }  
            },  
            // 注册新管理  
            addRegisterFun() {  
                this.registerData.username.trim()  
                this.registerData.password.trim()  
                this.registerData.myInviteCode.trim()  
                if (this.registerData.username == '') {  
                    this.$message.error('账号不能为空')  
                    return  
                }  

                if (this.registerData.password == '') {  
                    this.$message.error('密码不能为空')  
                    return  
                }  

                if (this.registerData.role.length === 0) {  
                    this.$message.error('未选择角色')  
                    return  
                }  

                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'addRegister',  
                        username: this.registerData.username,  
                        password: this.registerData.password,  
                        myInviteCode: this.registerData.myInviteCode,  
                        role: this.registerData.role  
                    },  
                    success: (res) => {  
                        if(res.result.code === 0) {  
                            // 获取管理员列表  
                            this.getAdminUserFun()  
                            this.registerBoolean = false  
                            // 其他业务代码,如跳转到首页等  
                            uni.showToast({  
                                title: '注册成功',  
                                icon: 'none'  
                            })  
                        } else {  
                            uni.showModal({  
                                content: res.result.message,  
                                showCancel: false  
                            })  
                        }  
                    },  
                    fail:(err) => {  
                        this.registerBoolean = false  
                        console.log(err)  
                        uni.showModal({  
                            content: '注册失败,请稍后再试',  
                            showCancel: false  
                        })  
                    }  
                })  
            },  
            // 添加新权限  
            addNewPermissionsFun() {  
                this.newPermissionsData.permissionID.trim()  
                this.newPermissionsData.permissionName.trim()  
                if (this.newPermissionsData.permissionID == '') {  
                    this.$message.error('唯一标识不能为空')  
                    return  
                }  

                if (this.newPermissionsData.permissionName == '') {  
                    this.$message.error('权限名称不能为空')  
                    return  
                }  

                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'addNewPermissions',  
                        permissionID: this.newPermissionsData.permissionID,  
                        permissionName: this.newPermissionsData.permissionName,  
                        comment: this.newPermissionsData.comment  
                    },  
                    success: (res) => {  
                        if(res.result.code === 0) {  
                            this.newPermissionsBoolean = false  
                            // 其他业务代码,如跳转到首页等  
                            uni.showToast({  
                                title: '添加成功',  
                                icon: 'none'  
                            })  
                        } else {  
                            uni.showModal({  
                                content: res.result.message,  
                                showCancel: false  
                            })  
                        }  
                    },  
                    fail:(err) => {  
                        this.newPermissionsBoolean = false  
                        console.log(err)  
                        uni.showModal({  
                            content: '添加失败,请稍后再试',  
                            showCancel: false  
                        })  
                    }  
                })  
            },  
            // 添加新角色  
            addNewRoleFun() {  
                this.newRoleData.roleID.trim()  
                this.newRoleData.roleName.trim()  
                this.newRoleData.comment.trim()  
                if (this.newRoleData.roleID == '') {  
                    this.$message.error('唯一标识不能为空')  
                    return  
                }  

                if (this.newRoleData.roleName == '') {  
                    this.$message.error('角色名称不能为空')  
                    return  
                }  

                if (this.newRoleData.permission.length == 0) {  
                    this.$message.error('未给角色添加权限')  
                    return  
                }  

                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'addNewRole',  
                        roleID: this.newRoleData.roleID,  
                        roleName: this.newRoleData.roleName,  
                        comment: this.newRoleData.comment,  
                        permission: this.newRoleData.permission  
                    },  
                    success: (res) => {  
                        if(res.result.code === 0) {  
                            this.newRoleBoolean = false  
                            // 其他业务代码,如跳转到首页等  
                            uni.showToast({  
                                title: '添加成功',  
                                icon: 'none'  
                            })  
                        } else {  
                            uni.showModal({  
                                content: res.result.message,  
                                showCancel: false  
                            })  
                        }  
                    },  
                    fail:(err) => {  
                        this.newRoleBoolean = false  
                        console.log(err)  
                        uni.showModal({  
                            content: '添加失败,请稍后再试',  
                            showCancel: false  
                        })  
                    }  
                })  
            },  
            // 获取权限列表  
            getNewPermissionsFun() {  
                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'getNewPermissions'  
                    },  
                    success: (res) => {  
                        if(res.result.code === 0) {  
                            console.log(res)  
                            this.newPermissionsDataList = res.result.permissionList  
                            // 其他业务代码,如跳转到首页等  
                            uni.showToast({  
                                title: '权限列表获取成功',  
                                icon: 'none'  
                            })  
                        } else {  
                            uni.showModal({  
                                content: res.result.message,  
                                showCancel: false  
                            })  
                        }  
                    },  
                    fail: (err) => {  
                        console.log(err)  
                        uni.showModal({  
                            content: '权限列表获取失败,请重试',  
                            showCancel: false  
                        })  
                    }  
                })  
            },  
            // 获取所有角色  
            getNewRoleDataListFun() {  
                uniCloud.callFunction({  
                    name: 'shop-uniCloud-user',  
                    data: {  
                        action: 'getNewRoleDataList'  
                    },  
                    success: (res) => {  
                        if(res.result.code === 0) {  
                            console.log(res)  
                            this.newRoleDataList = res.result.roleList  
                            // 其他业务代码,如跳转到首页等  
                            uni.showToast({  
                                title: '角色列表获取成功',  
                                icon: 'none'  
                            })  
                        } else {  
                            uni.showModal({  
                                content: res.result.message,  
                                showCancel: false  
                            })  
                        }  
                    },  
                    fail: (err) => {  
                        console.log(err)  
                        uni.showModal({  
                            content: '角色列表获取失败,请重试',  
                            showCancel: false  
                        })  
                    }  
                })  
            }  
        }  
    }  
</script>  

<style scoped>  
    .content {  
        width: auto;  
        height: auto;  
        padding: 10px 20px;  
        margin: auto;  
    }  
</style>  

上面这是关于添加角色、权限、注册的代码

下面是云函数的代码

'use strict';
const db = uniCloud.database()
const dbCmd = db.command
const userDb = db.collection('uni-id-users')
const uniID = require('uni-id')
exports.main = async (event, context) => {
let res

if (event.action == 'getUser') { // 获取 用户数据列表  
    let pageNum = event.data.pageNum - 1  // 页码  
    let pageSize = event.data.pageSize // 每页数量  

    let list = await userDb.where({  
        role: dbCmd.eq(null)  
    }).orderBy("sort", "asc").skip(pageNum*10).limit(pageSize).get()  

    let total = await userDb.where({  
        role: dbCmd.eq(null)  
    }).orderBy("sort", "asc").skip(pageNum*10).limit(pageSize).count()  

    res = {  
        list,  
        total  
    }  
} else if (event.action == 'getAdminUser') { // 获取 管理员列表  

    let list = await userDb.where({  
        role: dbCmd.neq(null)  
    }).orderBy("sort", "asc").skip(0).limit(99).get()  

    let total = await userDb.where({  
        role: dbCmd.neq(null)  
    }).orderBy("sort", "asc").skip(0).limit(99).count()  

    let roleList = await uniID.getRoleList({  
        limit: 0,  
        offset: 0,  
        needTotal: true  
    })  

    let permissionList = await uniID.getPermissionList({  
        limit: 0,  
        offset: 0,  
        needTotal: true  
    })  

    res = {  
        list,  
        total,  
        roleList,  
        permissionList  
    }  
} else if (event.action == 'addRegister') { // 注册新管理  
    res = await uniID.register({  
        username: event.username,  
        password: event.password,  
        myInviteCode: event.myInviteCode,  
        needPermission: true,  
        role: event.role  
    })  
} else if (event.action == 'addNewPermissions') { // 添加新权限  
    res = await uniID.addPermission({  
        permissionID: event.permissionID,  
        permissionName: event.permissionName,  
        comment: event.comment  
    })  
} else if (event.action == 'addNewRole') { // 添加新角色  
    res = await uniID.addRole({  
        roleID: event.roleID,  
        roleName: event.roleName,  
        comment: event.comment,  
        permission: event.permission  
    })  
} else if (event.action == 'getNewPermissions') { // 获取权限列表  
    res = await uniID.getPermissionList({  
        limit: 0,  
        offset: 0,  
        needTotal: true  
    })  
} else if (event.action == 'getNewRoleDataList') { // 获取所有角色  
    res = await uniID.getRoleList({  
        limit: 0,  
        offset: 0,  
        needTotal: true  
    })  
} else if (event.action == 'getPermissionByUid') { // 获取所有角色  
    res = await uniID.getPermissionByUid({  
        uid: event.uid  
    })  
}  

//返回数据给客户端  
return res  

};

该问题目前已经被锁定, 无法添加新回复