thinkphp6权限角色菜单功能实现方式

thinkphp6权限角色菜单功能实现方式

首先上图展示效果:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码展示:
在这里插入图片描述

/**
    * @Description  新增菜单
    * @Date   2022/1/24 15:42
    */
    public function add()
    {
        $param = get_params();
        if (request()->isAjax()) {
            if ($param['id'] > 0) {
                try {
                    validate(MenuCheck::class)->scene('edit')->check($param);
                } catch (ValidateException $e) {
                    // 验证失败 输出错误信息
                    return to_assign(1, $e->getError());
                }
                $param['update_time'] = time();
                Db::name('admin_menu')->strict(false)->field(true)->update($param);
//                add_log('edit', $param['id'], $param);   //员工操作日志
            } else {
                try {
                    validate(MenuCheck::class)->scene('add')->check($param);
                } catch (ValidateException $e) {
                    // 验证失败 输出错误信息
                    return to_assign(1, $e->getError());
                }
                $param['create_time'] = time();
                $mid = Db::name('admin_menu')->strict(false)->field(true)->insertGetId($param);
                //自动为系统所有者管理组分配新增的菜单
                $group = Db::name('admin_group')->find(1);
                if (!empty($group)) {
                    $newGroup['id'] = 1;
                    $newGroup['menus'] = $group['menus'] . ',' . $mid;
                    Db::name('admin_group')->strict(false)->field(true)->update($newGroup);
//                    add_log('add', $mid, $param);   //员工操作日志
                }
            }
            // 删除后台菜单缓存
            clear_cache('admin_menu');
            return to_assign();
        } else {

            $id = isset($param['id']) ? $param['id'] : 0;
            $pid = isset($param['pid']) ? $param['pid'] : 0;
            if($id>0){
                $detail = Db::name('admin_menu')->where('id',$id)->find();
                View::assign('detail', $detail);
            }
            View::assign('id', $id);
            View::assign('pid', $pid);
            return view();
        }

    }


    /**
     * @Description  删除菜单
     * @Date   2022/1/25 15:26
     */
    public function delete()
    {
        $id = get_params('id');
        $count = Db::name('admin_menu')->where(['pid' => $id])->count();
        if ($count > 0) {
            return to_assign(1, '该菜单下还有子菜单,无法删除');
        }
        if (Db::name('admin_menu')->delete($id) !== false) {
            // 删除后台菜单缓存
            clear_cache('admin_menu');
//            add_log('delete', $id, []);
            return to_assign(0, '删除菜单成功');
        } else {
            return to_assign(1, '删除失败');
        }
    }

在这里插入图片描述

 //添加
    public function add()
    {
        $param = get_params();
        if (request()->isAjax()) {
            if ($param['id'] > 0) {
                try {
                    validate(RuleCheck::class)->scene('edit')->check($param);
                } catch (ValidateException $e) {
                    // 验证失败 输出错误信息
                    return to_assign(1, $e->getError());
                }
                Db::name('AdminRule')->strict(false)->field(true)->update($param);
                add_log('edit', $param['id'], $param);
            } else {
                try {
                    validate(RuleCheck::class)->scene('add')->check($param);
                } catch (ValidateException $e) {
                    // 验证失败 输出错误信息
                    return to_assign(1, $e->getError());
                }
                $param['create_time'] = time();
                $rid = Db::name('AdminRule')->strict(false)->field(true)->insertGetId($param);
                //自动为系统所有者管理组分配新增的节点
                $group = Db::name('AdminGroup')->find(1);
                if (!empty($group)) {
                    $newGroup['id'] = 1;
                    $newGroup['rules'] = $group['rules'] . ',' . $rid;
                    Db::name('AdminGroup')->strict(false)->field(true)->update($newGroup);
                    add_log('add', $rid, $param);
                }
            }
            // 删除后台节点缓存
            clear_cache('adminRules');
            return to_assign();
        } else {
            $id = isset($param['id']) ? $param['id'] : 0;
            $pid = isset($param['pid']) ? $param['pid'] : 0;
            if($id>0){
                $detail = Db::name('AdminRule')->where('id',$id)->find();
                View::assign('detail', $detail);
            }
            View::assign('id', $id);
            View::assign('pid', $pid);
            return view();
        }
    }
    //删除
    public function delete()
    {
        $id = get_params("id");
        $count = Db::name('AdminRule')->where(["pid" => $id])->count();
        if ($count > 0) {
            return to_assign(1, "该节点下还有子节点,无法删除");
        }
        if (Db::name('AdminRule')->delete($id) !== false) {
            clear_cache('adminRules');
            add_log('delete', $id, []);
            return to_assign(0, "删除节点成功");
        } else {
            return to_assign(1, "删除失败");
        }
    }

具体的前端代码和后端框架和数据库我打包放到码云上了,需要的前往下载(账号密码我放在text文件中,配置完即可查看运行)(点击即可查看):码云代码地址

https://gitee.com/zhangchang521/authority-management.git(备注,以防跳转失败)

如有任何疑问可留言询问

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ThinkPHP6和Vue中实现角色权限可以通过以下步骤进行: 1. 在后端(ThinkPHP6)中,首先需要创建相应的数据库表来存储角色权限信息。可以创建一个角色表和一个权限表,以及一个中间表来建立角色权限之间的多对多关系。 2. 在后端中,使用ThinkPHP6的ORM功能来定义角色权限的模型,并建立它们之间的关联关系。可以使用`hasMany`和`belongsToMany`等关联方法来定义模型之间的关系。 3. 在后端中,创建相应的控制器和路由来处理角色权限的增删改查操作。可以使用ThinkPHP6的资源路由功能来简化路由的定义。 4. 在前端(Vue)中,使用Vue Router来管理路由。可以根据用户的角色权限动态生成路由,以实现不同角色的不同权限。 5. 在前端中,使用Vue的路由守卫功能来进行权限验证。可以在路由跳转前进行权限判断,如果用户没有相应的权限,则跳转到无权限页面或者给出相应的提示。 6. 在前端中,根据用户的角色权限动态显示菜单和页面内容。可以根据用户的角色权限来控制菜单的显示和页面内容的访问。 以下是一个简单的示例代码: 后端(ThinkPHP6): ```php // 定义角色模型 class Role extends Model { // 定义与权限的多对多关联关系 public function permissions() { return $this->belongsToMany(Permission::class); } } // 定义权限模型 class Permission extends Model { // 定义与角色的多对多关联关系 public function roles() { return $this->belongsToMany(Role::class); } } // 定义角色控制器 class RoleController extends Controller { // 获取角色列表 public function index() { $roles = Role::all(); return $roles; } // 创建角色 public function store(Request $request) { $role = new Role; $role->name = $request->name; $role->save(); return $role; } // 更新角色 public function update(Request $request, $id) { $role = Role::find($id); $role->name = $request->name; $role->save(); return $role; } // 删除角色 public function destroy($id) { $role = Role::find($id); $role->delete(); return '删除成功'; } } // 定义路由 Route::resource('roles', 'RoleController'); ``` 前端(Vue): ```javascript // 定义路由 const routes = [ { path: '/', component: Home, children: [ { path: 'dashboard', component: Dashboard, meta: { requiresAuth: true, roles: ['admin'] } // 需要登录且角色为admin才能访问 }, { path: 'users', component: Users, meta: { requiresAuth: true, roles: ['admin'] } // 需要登录且角色为admin才能访问 }, { path: 'roles', component: Roles, meta: { requiresAuth: true, roles: ['admin'] } // 需要登录且角色为admin才能访问 }, { path: 'permissions', component: Permissions, meta: { requiresAuth: true, roles: ['admin'] } // 需要登录且角色为admin才能访问 } ] }, { path: '/login', component: Login }, { path: '/403', component: Forbidden }, { path: '*', component: NotFound } ] // 定义路由守卫 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth) { // 判断用户是否登录 if (!isAuthenticated()) { next('/login') } else { // 判断用户是否有权限访问该路由 if (hasPermission(to.meta.roles)) { next() } else { next('/403') } } } else { next() } }) // 判断用户是否登录 function isAuthenticated() { // 判断用户是否登录的逻辑 } // 判断用户是否有权限访问该路由 function hasPermission(roles) { // 判断用户是否有权限访问该路由的逻辑 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骨子里的偏爱

上传不易,还请多多支持。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值