13 @foreach($module['rules'] as $rule)
14
43 @endforeach
44
45
46 @endslot
47 @endcomponent
48 @endsection
permiss.blade.php
3. 给用户设置权限
1 public function permissionStore(Request $request,Role $role)
2 {
3 $role->syncPermissions($request->name); // 同步权限
4 session()->flash('success','修改权限成功');
5
6 return back();
7 }
4. 根据用户来控制后台侧边导航栏的显示
4.1 初始化管理员角色
4.1.1 分配角色 —— 角色属于那个模型
解释:因为CMS系统是多模块的,那么角色就得和不同模块绑定关系,不绑定就不可能操作该模块
$user->assignRole(['super_user','admin']);
注意:Laravel默认是没有这方法的,所以需要拓展模型(模拟多继承)
1
2
3 namespace App;
4
5 use IlluminateNotificationsNotifiable;
6 use IlluminateFoundationAuthUser as Authenticatable;
7 use SpatiePermissionTraitsHasRoles;
8
9 class Admin extends Authenticatable
10 {
11 use Notifiable;
12 use HasRoles;
13 }
4.2 侧边导航栏显示
目的:给用户分配了什么权限,侧边导航栏就显示相应的权限链接
实现:
1. 再Config文件当中,将menus.php 和 permission.php 的 permission配置项进行统一
2. 修改_menus.blade.php文件
1
解释:@can是laravel的指令,用来检查用户是否具有某种权限
5. 站长权限(超级管理员权限)
5.1 对laravel-permission的致敬
我使用的laravel-module中是有对laravel-permission的一个改良,比如对中间件验证权限的改良(larave-permission处理不够灵活并对资源控制器支持不好)
laravel-module:
1. 在进行store和update的权限验证时,会自动对跳转到create、edit进行验证
2. 在进行站长权限判断时,一步即可(而laravel-permission需要先进行用户属于什么角色判断,再进行有什么权限判断两步)
5.2 修改Config/menus.php和Config/permission.php文件
之前在这两个文件中,对permission配置项进行了语义化的书(比如Admin模块下的角色管理中的permission配置项写的是Admin::config-roles),但其实这2个文件并不对用户开放,且一旦系统成型修改不大,所以运用了以下写法


1
2 0 =>
3 [
4 'title' => '系统管理',
5 'icon' => 'fa fa-navicon',
6 'permission' => ['ModulesAdminHttpControllersRoleController@index'],
7 'menus' =>
8 [
9 [
10 'title' => '角色管理',
11 'icon' => 'fa fa-user-md',
12 'permission' => 'ModulesAdminHttpControllersRoleController@index',
13 'url' => '/admin/role',
14 ],
15 ],
16 ],
17 ];
menus.php


1
2 /**
3 * 权限配置
4 * 为了避免其他模块有同名的权限,权限标识要以 '控制器@方法' 开始
5 */
6 return [
7 [
8 'group' => '角色管理',
9 'permissions' => [
10 [
11 'title' => '角色列表',
12 'name' => 'ModulesAdminHttpControllersRoleController@index',
13 'guard' => 'admin',
14 ],
15 [
16 'title' => '添加角色',
17 'name' => 'ModulesAdminHttpControllersRoleController@create',
18 'guard' => 'admin',
19 ],
20 [
21 'title' => '删除角色',
22 'name' => 'ModulesAdminHttpControllersRoleController@destory',
23 'guard' => 'admin',
24 ],
25 [
26 'title' => '修改角色',
27 'name' => 'ModulesAdminHttpControllersRoleController@edit',
28 'guard' => 'admin',
29 ],
30 [
31 'title' => '修改角色权限',
32 'name' => 'ModulesAdminHttpControllersRoleController@permission',
33 'guard' => 'admin',
34 ],
35 ],
36 ],
37 ];
permission.php
修改之后,相应的_menus.blade.php也需要进行修改


1
_menus.blade.php
5.3 站长权限配置
整个站都是属于他/她的,所以不需要对其进行验证
5.3.1 确定站长
运行 php artisan vender:publish --provider="HoudunwangModuleLaravelServiceProvider"
在config/hd_module中就会有webmaster配置项啦
5.3.2 忽略检测站长权限
只需要将用户标识和webmaster配置项对应即可
5.3.3 添加中间件
在进行后台的任何操作时候,就需要进行中间件来判断是否该用户是站长
此时就需要路由
1
2
3 Route::group(
4 ['middleware' => 'web','prefix' => 'admin','namespace' => 'ModulesAdminHttpControllers'],
5 function () {
6 Auth::routes();
7 }
8 );
9
10 Route::group(
11 ['middleware' => ['web','auth:admin'],
12 function () {
13 // 后台首页
14 Route::get('/','AdminController@index');
15
16 // 角色管理
17 Route::resource('role','RoleController')->middleware('permission:superAdmin');
18
19 // 权限管理
20 Route::get('role/permission/{role}','RoleController@permission')->middleware('permission:superAdmin');
21 Route::post('role/permission/{role}','RoleController@permissionStore')->middleware('permission:superAdmin');
22 }
23 );
注意:
1. 这个中间件是路由中间件,所以需要到app/Http/Kernel.php中进行注册(之后所以自定义的中间件都是如此,只是需要注册在相应位置即可)
2. middleware('permission:admin');中的admin参数是守卫者不是webmaster配置项
3.middleware('permission:admin,resource');中的resource参数时针对resource路由才添加
'permission' => HoudunwangModuleMiddlewaresPermissionMiddleware::class,
6. 零碎
6.1 修复Vue模板中不能使用JS的情况
需要使用@yield("")占位符,不然会报Vue模板错误
6.2 模型删除操作和表外键约束注意事项
站长可不敢删除啊
依赖表数据变化,本表数据删除
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!