Lumen企业站内容管理实战 - 权限管理

权限管理

 话不多说,先上路由

// 权限
    $router->get('/permission/list', 'PermissionController@lists'); // 权限列表
    $router->addRoute(['GET', 'POST'],'/permission/add', 'PermissionController@add'); // 添加权限
    $router->addRoute(['GET', 'POST'],'/permission/edit/{id:[1-9]+}', 'PermissionController@edit'); // 编辑权限
    $router->post('/permission/del', 'PermissionController@del'); // 删除权限

打开权限模型,新增lists方法,因为模型我们前边已经新建好了

<?php


namespace App\Models;


use Illuminate\Database\Eloquent\Model;

class Permission extends Model
{

    public function menu()
    {
        return $this->belongsTo(Menu::class, 'menu_id', 'id');
    }

    public static function lists(array $conditions, int $page = 0, int $parPage = 10)
    {
        $permission = Permission::with('menu');
        !empty($conditions['name']) && $permission->where('name', 'like', "%{$conditions['name']}%"); // 模糊匹配查询

        $permission->orderBy('id', 'DESC');

        return $permission->paginate($parPage, ['*'], 'page', $page);
    }
}

新建权限控制器,并且写一个列表方法

<?php

namespace App\Http\Controllers\Admin;


use App\Http\Controllers\Controller;
use App\Models\Permission;
use Illuminate\Http\Request;

class PermissionController extends Controller
{
    public function lists(Request $request)
    {

        $data['permission'] = Permission::lists($request->input(), $request->input('page', 0));
        return view('admin.permission.list', $data);
    }
}

在权限视图目录下新建一个list.blade.php文件,效果如下

添加权限

在权限模型中,新加一个add()方法,用于保存权限。这几个字段都是必填项,所以不做判断了。

public static function add(array $data)
    {
        $permission = new Permission();
        $permission->menu_id = $data['menu_id'];
        $permission->name = $data['name'];
        $permission->path = $data['path'];
        return $permission->save();
    }

权限控制器中,写一个add()方法

public function add(Request $request)
    {

        if ($request->post()) {
            // todo 验证数据

            Permission::add($request->input());
            return $this->response->responseJSON();
        }

        $data['menu'] = Menu::lists();

        return view('admin.permission.add', $data);
    }

在权限视图目录下,新建一个add.blade.php文件,效果如下

新增权限看看

可以,没问题。那个路径,就是在路由文件中定义的,要保持一致。

在看看编辑

在权限模型中,添加编辑方法edit()

public static function edit(Permission $permission, $data)
    {
        !empty($data['menu_id']) && $permission->menu_id = (int)$data['menu_id'];
        !empty($data['name']) && $permission->name = $data['name'];
        !empty($data['path']) && $permission->path = $data['path'];
        return $permission->update();
    }

在权限控制器中添加编辑方法edit()

public function edit(int $id, Request $request)
    {

        $permission = Permission::where('id', $id)->first();
//        if(empty($category->id)){
//            //跳转到错误页面
//        }

        if ($request->post()) {

            // todo 验证数据;防止重复数据

            Permission::edit($permission, $request->input());
            return $this->response->responseJSON();
        }

        $data['menu'] = Menu::lists();
        $data['permission'] = $permission;
        return view('admin.permission.edit', $data);
    }

在权限视图目录新增edit.blade.php文件,效果如下

 最后,做删除,删除要注意了,如果要删除权限,那么角色权限关系表中也要删除对应的权限。删除权限,使用事务,保持数据的一致性。事务的话,我们使用DB::transaction()。在权限模型中,添加del()方法

public static function del(array $ids)
    {
        try {
            DB::transaction(function () use ($ids) {

                // 删除权限
                Permission::whereIn('id', $ids)->delete();

                // 删除角色权限关系表中的对应的权限
                RolePermission::whereIn('permission_id', $ids)->delete();
            });
        } catch (\Exception $e) {
            return false;
        }
        return true;

    }

如果事务出现问题,会被抛出异常,那么数据就会回滚。

在权限控制器中,添加del方法

public function del(Request $request)
    {
        // todo 验证数据
        $rt = Permission::del($request->input('ids'));
        if(!$rt){
            $this->response->setMsg(500,'删除失败');
        }
        return $this->response->responseJSON();

    }

我们删除试试看

 

全部删除了。

完。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wangpeng52758

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值