权限管理
话不多说,先上路由
// 权限
$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();
}
我们删除试试看
全部删除了。
完。