管理员后台 laravel-admin
之前有用过Laravel Administrator 来构建管理员后台,这次想使用更加快速的后台管理laravel-admin,
在这次使用的过程着实遇到了一些问题,特地记住在此,主要是涉及到 Laravel-permission扩展包的问题。
laravel-admin安装
composer安装
1
composer encore/laravel-admin
运行下面的命令来发布资源
1
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
在该命令会生成配置文件config/admin.php,可以在里面修改安装的地址、数据库连接、以及表名,建议都是用默认配置不修改。
- 然后运行下面的命令完成安装:
1
php artisan admin:install
启动服务后,在浏览器打开 http://localhost/admin/ ,使用用户名 admin 和密码 admin登陆.
具体详情参照手册:http://laravel-admin.org/docs/#/zh/
使用
更多使用不赘述,找手册,此处只以 用户管理 为例说明
- 创建模型的路由器
1
2
3
4php artisan admin:make UserController --model=App\\Models\\User
// 在windows系统中
php artisan admin:make UserController --model=App\Models\User
注意:我是在虚拟机中使用,所以使用第一行的命令创建。
然后会创建路由器文件app/Admin/Controllers/UserController.php.
- 添加路由配置
在laravel-admin的路由配置文件app/Admin/routes.php里添加一行:1
$router->resource('users', UserController::class);
相关说明
在UserController中 grid() 用以构建数据表格, form() 构建表单1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40protected function grid()
{
return Admin::grid(User::class, function (Grid $grid) {
$grid->model()->orderBy('id', 'desc'); // 降序排列
$grid->id('ID')->sortable();
$grid->name('用户名');
$grid->email('邮箱');
$grid->created_at();
$grid->updated_at();
$grid->filter(function ($filter) {
$filter->like('name', '用户名'); // 按字段模糊筛选
$filter->like('email', '邮箱');
$filter->between('created_at', '创建时间')->datetime(); // 设置created_at字段的范围筛选
});
});
}
protected function form()
{
return Admin::form(User::class, function (Form $form) {
$form->display('id', 'ID');
$form->text('name', '用户名');
$form->text('password', '密码')->rules('nullable');
$form->text('email', '邮箱');
$form->display('created_at', 'Created At');
$form->display('updated_at', 'Updated At');
// $form->saving(function (Form $form) {
// // 密码加密
// if ($form->password && $form->model()->password != $form->password) {
// $form->password = bcrypt($form->password);
// }
// });
$form->multipleSelect('roles', '角色')->options(Role::all()->pluck('name', 'id'));
});
}
问题
1.在修改用户密码时,遇到密码没有加密的问题
此时可以添加saving方法写入密码,如下面的代码。也可以使用修改器,在User模型中添加1
2
3
4
5
6
7
8
9
10// 修改器是在 写入数据库前 修改
public function setPasswordAttribute($value)
{
// 如果值的长度等于 60,即认为是已经做过加密的情况
if (strlen($value) != 60) {
// 不等于 60,做密码加密处理
$value = bcrypt($value);
}
$this->attributes['password'] = $value;
}
2.用户权限问题
laravel-admin自带的权限管理是针对后台管理员的,不是针对我们普通的注册用户的。如果我要在网站上招募普通管理员,
就需要对他们进行相关授权了。此时,我使用了 laravel-permission 扩展,具体的使用方法,参照我之前的博客。
此处只想说明在 laravel-admin中的用户管理如何关联权限,由于权限是跟角色挂钩的,所以我们需要在UserController中添加:1
use Spatie\Permission\Models\Role;
然后在form()方法构建表单时,给它一个多选下拉框1
$form->multipleSelect('roles', '角色')->options(Role::all()->pluck('name', 'id'));
然后就可以选择用户的角色了。