3管理员+权限+退出及登录

在线教育平台

1. 管理员

1.1 管理员添加

分析:

   1. 加载并显示视图

   2. 修改表单

   3. 使用ajax提交数据[ webuploader图片上传插件的使用 ]

   4. 控制器接收并校验数据

   5. 保存数据并返回结果

1.1.1 加载并显示视图

把h-ui内置的管理员添加页面直接拿过来。

 

 

调整页面样式:

 

 

效果:

 

 

1.1.2 修改表单

控制器:

 

 

视图代码:

 

 

1.1.3 提交数据

视图代码:

 

 

1.1.4 控制器接收并校验数据

控制器代码:

 

 

1.1.5 保存数据并返回结果

 

 

1.1.6 完善添加管理员功能

使用webuploader上传图片插件来完成图像的上传。这个插件是百度前端团队开发的。

 

 

详见附件中的 7-Laravel框架 - webuploader.doc

 

因为整个项目后台不仅管理员的头像需要使用图片上传,其他的功能也可能使用文件上传,所以建议创建一个统一的方法和路由来处理文件上传。

路由:

 

 

控制器:

 

 

视图代码:

 

 

 

实例化webuploader插件

 

 

HTML标签:

 

 

效果:

 

 

1.1.6.1 完善头像上传功能,添加一个进度条

HTML代码:

 

 

js代码:

 

 

效果:

 

 

 

1.1.7 保存上传文件

之前,我们保存文件都是使用本地存储,通过move、store、storeAs进行本地存储,通过store、storeAs第一个参数可以设置存储位置(设备,设备名称在config/filesystem.php文件中)。

接下来,我们使用云存储来保存我们的文件资源。

云存储,也叫对象存储,OSS

常见的云存储有腾讯云v4,阿里云的OSS,七牛云的对象存储,亚马逊的S3云存储。

我们这里使用的七牛云的对象存储。

七牛云的个人中心:

 

 

创建存储空间

 

 

创建完成以后,接下来,我们需要在Laravel中使用七牛云的云存储接口,把文件上传到七牛云服务器上,那么我们就使用七牛云提供的sdk开发工具,那么,我们Laravel其实在github上找到对应的七牛云相关的安装包直接下载。

 

 

 

1.1.7.1 安装laravel-storage-qiniu

composer require itbdw/laravel-storage-qiniu

cmd命令行:

 

 

打开config/app.php文件。

在providers下标对应的数组中添加

itbdw\QiniuStorage\QiniuFilesystemServiceProvider::class,

代码:

 

 

接下来在config/filesystem.php文件中在disks下标对应的数组中加上以下存储设备:

 

 

代码:

 

 

填写对应的密钥和存储空间名称(bucket)和域名(domain)

密钥在个人面板中可以找到

AK(access_key):    UhYWJIgbXnIzPHiZdVCenSnWVksXLlOY4WBAYc91

SK(secret_key):     kVIfTnGjvMU6U9f7l5n_0cTzG4rlGh_v-MXdcKlf

获取AK  SK

 

 

域名(域名要加 协议 ):

 

存储空间名字:

 

 

配置完成以后,直接参考github上面的操作,把上传文件同步到七牛云上面。

代码:

 

 

接下来,我们需要把上传文件的地址保存到数据库中。

我们因为使用的webuploader插件ajax上传的,所以需要在控制器返回数据时,设置一个隐藏域来存储这个地址,等待用户提交。

uploader.on( 'uploadSuccess', function( file ) {

$( '#'+file.id ).find('p.state').text('已上传');

});

控制器,代码;

操作时,注意参考https://github.com/itbdw/laravel-storage-qiniu 上面的例子和用法。

 

 

 

视图代码:

html

 

 

js

 

 

效果:

 

 

 

最终添加头像,一并上传添加管理员数据,效果:

 

 

上面改成 img 图片即可。

 

1.2 管理员删除

因为我们前面直接拿了 角色管理的模型和控制器,所以AdminController就直接拥有了软删除的功能,所以这块我们不需要开发,直接可以使用。

 

1.3 管理员编辑

这里也是因为我们复制了角色管理的模型和控制器,所以后台大部分直接可以使用,修改的几处地方在于:

  1. 验证的代码和规则
  2. 密码是否进行修改
  3. 帐号的禁用状态是否变化

控制器,代码:

 

 

 

视图,代码:

 

 

路由地址(因为我们需要在用户上传图片的时候需要删除旧的图片):

路由地址:

 

 

控制器,代码:

 

 

 

2. 权限

直接把整个管理员功能的所有的文件复制一份,修改成权限即可。

2.1 权限相关的路由创建

代码:

 

 

2.2 创建资源控制器

php artisan make:controller Admin\AuthController --resource

 

 

2.2.1 把AdminController中的代码复制过来

修改以下:

  1. “管理员”改成“权限”
  2. “AdminController” 改成 “AuthController”
  3. App\Models\Admin” 改成“App\Models\Auth”
  4. 把 “return view(‘admin.admin.’) 中的“admin.admin” 改成 “admin.auth”
  5. “Admin $admin”改成“Auth $auth”
  6. “$admin” 改成 “$auth”
  7. “adminInfo” 改成 “authInfo”
  8. new Admin” 改成 “new Auth”
  9. “username” 改成“auth_name”
  10. 去掉  “use App\Models\Role
  11. unique:admin” 修改成 “unique:auth”

 

2.3 添加权限模型

php artisan make:model Models\Auth

命令行:

 

 

代码:

把Admin模型里面的代码,复制一份到Auth模型中。

 

 

2.4 权限测试数据添加

php artisan make:seeder AuthTableSeeder

命令行:

 

 

代码:

 

 

执行数据填充种子文件

php artisan db:seed --class=AuthTableSeeder

命令行:

 

 

效果:

 

 

 

2.5 权限列表

2.5.1 调整权限列表的链接

代码:

 

 

2.5.2 把角色列表的模板复制过来,并调整代码以及关键词

 

 

效果:

 

 

修改代码:

修改如下:

  1. “管理员”改成“权限”
  2. 表格的表头改成输出权限的内容

   

 

  1. “admin/admin”改成“admin/auth”

接下来,在控制器中查询对应的权限数据并返回给页面中的ajax

控制器,代码:

 

 

HTML表格:

 

 

js代码:

 

 

效果:

 

 

同时,上面的删除功能已经具备了软删除。

 

2.5.3 完善权限列表的显示

控制器代码:

 

 

效果:

 

 

 

2.6 添加权限

2.6.1 修改AuthController@create的代码

控制器,代码:

 

 

2.6.2 复制管理员的添加页面

 

 

2.6.2.1 修改添加页面的代码

视图,代码:

 

 

效果: 

 

 

2.6.3 控制器接收数据

 

 

 

2.7 给角色分配权限

我们这里要在添加角色的时候,显示所有的顶级权限和子权限出来,供管理员勾选

 

 

视图中的权限是三层结构,我们项目中只需要两层即可。

 

 

 

效果:

 

 

控制器,代码:

 

 

2.7.1 在视图中输出所有的权限

视图代码:

 

 

效果:

 

 

接下来,我们需要让对应的子权限只出现在其父级权限下面。

 

 

效果:

 

 

 

接下来,我们可以继续给权限数据增加多一点的测试数据。例如,权限管理部分的, 角色部分的,或者我们后面的专业、专业分类之类的、会员等。

      // 权限

      $auth->truncate();

      // 顶级权限

      $auth->create(['id'=>1,'auth_pid'=>0,'auth_name'=>'专业分类','is_menu'=>1]);

      $auth->create(['id'=>2,'auth_pid'=>0,'auth_name'=>'专业管理','is_menu'=>1]);

      $auth->create(['id'=>3,'auth_pid'=>0,'auth_name'=>'点播课程','is_menu'=>1]);

      $auth->create(['id'=>4,'auth_pid'=>0,'auth_name'=>'点播课时','is_menu'=>1]);

      $auth->create(['id'=>5,'auth_pid'=>0,'auth_name'=>'会员管理','is_menu'=>1]);

      $auth->create(['id'=>6,'auth_pid'=>0,'auth_name'=>'直播管理','is_menu'=>1]);

      $auth->create(['id'=>7,'auth_pid'=>0,'auth_name'=>'试卷管理','is_menu'=>1]);

      $auth->create(['id'=>8,'auth_pid'=>0,'auth_name'=>'试题管理','is_menu'=>1]);

      $auth->create(['id'=>9,'auth_pid'=>0,'auth_name'=>'管理员管理','is_menu'=>1]);

      $auth->create(['id'=>10,'auth_pid'=>0,'auth_name'=>'角色管理','is_menu'=>1]);

      $auth->create(['id'=>11,'auth_pid'=>0,'auth_name'=>'权限管理','is_menu'=>1]);

 

 

      // 专业分类的子权限

      $auth->create(['auth_pid'=>1,'auth_name'=>'添加专业分类','auth_action'=>'create','auth_controller'=>'ProfessionCate','auth_address'=>'admin/profession_cate/create']);

      $auth->create(['auth_pid'=>1,'auth_name'=>'保存专业分类','auth_action'=>'store','auth_controller'=>'ProfessionCate','auth_address'=>'']);

      $auth->create(['auth_pid'=>1,'auth_name'=>'编辑专业分类','auth_action'=>'edit','auth_controller'=>'ProfessionCate','auth_address'=>'']);

      $auth->create(['auth_pid'=>1,'auth_name'=>'更新专业分类','auth_action'=>'update','auth_controller'=>'ProfessionCate','auth_address'=>'']);

      $auth->create(['auth_pid'=>1,'auth_name'=>'删除专业分类','auth_action'=>'destory','auth_controller'=>'ProfessionCate','auth_address'=>'']);

      $auth->create(['auth_pid'=>1,'auth_name'=>'专业分类列表','auth_action'=>'index','auth_controller'=>'ProfessionCate','auth_address'=>'admin/profession_cate','is_menu'=>1]);

 

      // 专业的子权限

      $auth->create(['auth_pid'=>2,'auth_name'=>'添加专业','auth_action'=>'create','auth_controller'=>'Profession','auth_address'=>'admin/profession/create']);

      $auth->create(['auth_pid'=>2,'auth_name'=>'保存专业','auth_action'=>'store','auth_controller'=>'Profession','auth_address'=>'']);

      $auth->create(['auth_pid'=>2,'auth_name'=>'编辑专业','auth_action'=>'edit','auth_controller'=>'Profession','auth_address'=>'']);

      $auth->create(['auth_pid'=>2,'auth_name'=>'更新专业','auth_action'=>'update','auth_controller'=>'Profession','auth_address'=>'']);

      $auth->create(['auth_pid'=>2,'auth_name'=>'删除专业','auth_action'=>'destory','auth_controller'=>'Profession','auth_address'=>'']);

      $auth->create(['auth_pid'=>2,'auth_name'=>'专业列表','auth_action'=>'index','auth_controller'=>'Profession','auth_address'=>'admin/profession','is_menu'=>1]);

 

      // 课程的子权限

      $auth->create(['auth_pid'=>3,'auth_name'=>'添加课程','auth_action'=>'create','auth_controller'=>'Course','auth_address'=>'admin/course/create']);

      $auth->create(['auth_pid'=>3,'auth_name'=>'保存课程','auth_action'=>'store','auth_controller'=>'Course','auth_address'=>'']);

      $auth->create(['auth_pid'=>3,'auth_name'=>'编辑课程','auth_action'=>'edit','auth_controller'=>'Course','auth_address'=>'']);

      $auth->create(['auth_pid'=>3,'auth_name'=>'更新课程','auth_action'=>'update','auth_controller'=>'Course','auth_address'=>'']);

      $auth->create(['auth_pid'=>3,'auth_name'=>'删除课程','auth_action'=>'destory','auth_controller'=>'Course','auth_address'=>'']);

      $auth->create(['auth_pid'=>3,'auth_name'=>'课程列表','auth_action'=>'index','auth_controller'=>'Course','auth_address'=>'admin/course','is_menu'=>1]);

 

      // 课时的子权限

      $auth->create(['auth_pid'=>4,'auth_name'=>'添加课时','auth_action'=>'create','auth_controller'=>'Lesson','auth_address'=>'admin/lesson/create']);

      $auth->create(['auth_pid'=>4,'auth_name'=>'保存课时','auth_action'=>'store','auth_controller'=>'Lesson','auth_address'=>'']);

      $auth->create(['auth_pid'=>4,'auth_name'=>'编辑课时','auth_action'=>'edit','auth_controller'=>'Lesson','auth_address'=>'']);

      $auth->create(['auth_pid'=>4,'auth_name'=>'更新课时','auth_action'=>'update','auth_controller'=>'Lesson','auth_address'=>'']);

      $auth->create(['auth_pid'=>4,'auth_name'=>'删除课时','auth_action'=>'destory','auth_controller'=>'Lesson','auth_address'=>'']);

      $auth->create(['auth_pid'=>4,'auth_name'=>'课时列表','auth_action'=>'index','auth_controller'=>'Lesson','auth_address'=>'admin/lesson','is_menu'=>1]);

 

      // 会员的子权限

      $auth->create(['auth_pid'=>5,'auth_name'=>'添加会员','auth_action'=>'create','auth_controller'=>'Member','auth_address'=>'admin/member/create']);

      $auth->create(['auth_pid'=>5,'auth_name'=>'保存会员','auth_action'=>'store','auth_controller'=>'Member','auth_address'=>'']);

      $auth->create(['auth_pid'=>5,'auth_name'=>'编辑会员','auth_action'=>'edit','auth_controller'=>'Member','auth_address'=>'']);

      $auth->create(['auth_pid'=>5,'auth_name'=>'更新会员','auth_action'=>'update','auth_controller'=>'Member','auth_address'=>'']);

      $auth->create(['auth_pid'=>5,'auth_name'=>'删除会员','auth_action'=>'destory','auth_controller'=>'Member','auth_address'=>'']);

      $auth->create(['auth_pid'=>5,'auth_name'=>'会员列表','auth_action'=>'index','auth_controller'=>'Member','auth_address'=>'admin/member','is_menu'=>1]);

 

      // 管理员的子权限

      $auth->create(['auth_pid'=>9,'auth_name'=>'添加管理员','auth_action'=>'create','auth_controller'=>'Admin','auth_address'=>'admin/admin/create']);

      $auth->create(['auth_pid'=>9,'auth_name'=>'保存管理员','auth_action'=>'store','auth_controller'=>'Admin','auth_address'=>'']);

      $auth->create(['auth_pid'=>9,'auth_name'=>'编辑管理员','auth_action'=>'edit','auth_controller'=>'Admin','auth_address'=>'']);

      $auth->create(['auth_pid'=>9,'auth_name'=>'更新管理员','auth_action'=>'update','auth_controller'=>'Admin','auth_address'=>'']);

      $auth->create(['auth_pid'=>9,'auth_name'=>'删除管理员','auth_action'=>'destory','auth_controller'=>'Admin','auth_address'=>'']);

      $auth->create(['auth_pid'=>9,'auth_name'=>'管理员列表','auth_action'=>'index','auth_controller'=>'Admin','auth_address'=>'admin/admin','is_menu'=>1]);

 

      // 角色的子权限

      $auth->create(['auth_pid'=>10,'auth_name'=>'添加角色','auth_action'=>'create','auth_controller'=>'Role','auth_address'=>'admin/role/create']);

      $auth->create(['auth_pid'=>10,'auth_name'=>'保存角色','auth_action'=>'store','auth_controller'=>'Role','auth_address'=>'']);

      $auth->create(['auth_pid'=>10,'auth_name'=>'编辑角色','auth_action'=>'edit','auth_controller'=>'Role','auth_address'=>'']);

      $auth->create(['auth_pid'=>10,'auth_name'=>'更新角色','auth_action'=>'update','auth_controller'=>'Role','auth_address'=>'']);

      $auth->create(['auth_pid'=>10,'auth_name'=>'删除角色','auth_action'=>'destory','auth_controller'=>'Role','auth_address'=>'']);

      $auth->create(['auth_pid'=>10,'auth_name'=>'角色列表','auth_action'=>'index','auth_controller'=>'Role','auth_address'=>'admin/role','is_menu'=>1]);

 

      // 权限的子权限

      $auth->create(['auth_pid'=>11,'auth_name'=>'添加权限','auth_action'=>'create','auth_controller'=>'Auth','auth_address'=>'admin/auth/create']);

      $auth->create(['auth_pid'=>11,'auth_name'=>'保存权限','auth_action'=>'store','auth_controller'=>'Auth','auth_address'=>'']);

      $auth->create(['auth_pid'=>11,'auth_name'=>'编辑权限','auth_action'=>'edit','auth_controller'=>'Auth','auth_address'=>'']);

      $auth->create(['auth_pid'=>11,'auth_name'=>'更新权限','auth_action'=>'update','auth_controller'=>'Auth','auth_address'=>'']);

      $auth->create(['auth_pid'=>11,'auth_name'=>'删除权限','auth_action'=>'destory','auth_controller'=>'Auth','auth_address'=>'']);

      $auth->create(['auth_pid'=>11,'auth_name'=>'权限列表','auth_action'=>'index','auth_controller'=>'Auth','auth_address'=>'admin/auth','is_menu'=>1]);

2.7.2 执行数据填充种子

 

 

效果:

 

 

接下来就要在添加角色的时候,保存权限。

2.7.3 修改添加角色的表单

 

 

2.7.4 控制器接收数据

代码:

 

 

效果:

 

 

接下来,我们需要把这些数据保存到数据库中,但是正常情况下,我们的mysql数据无法直接保存数组格式的数据。

laravel的模型有一个类型转换的功能,可以帮我们自动转换数据类型,通过这种自动转换,我们可以实现在存储数据时,把数组转成json格式数据存储到数据库中,同时在获取数据时,Laravel的模型也可以帮我们把json格式的数据转换成数组提供给我们。

 

 

Role模型,代码:

 

 

 

接下来,我们完成登录和退出,以及输出当前管理员的权限菜单

3. 登录和退出

前面我们已经创建了路由和引入了登录页面,同时,登录的方法在创建在了IndexController控制器里面了。

3.0.1 调整登录页面的样式

 

 

效果:

 

 

3.0.2 显示验证码

3.0.2.1 使用composer安装验证码安装包

 

 

3.0.2.2 配置验证码

 

 

 

3.0.2.3 生成配置文件

 

 

配置文件:

 

 

3.0.2.4 显示验证码

代码:

 

 

效果:

 

 

3.0.2.5 调整表单

 

 

3.0.3 控制器接收数据

代码:

 

 

3.0.4 使用Auth授权认证类完成登录操作

配置auth.php文件,创建admin后台管理员的登录授权规则。代码:

3.0.4.1 创建新的guard授权认证规则

 

 

3.0.4.2 创建新的授权认证服务

 

 

最后,修改Admin模型,然后Admin支持使用Auth授权认证类。

 

 

3.0.4.3 控制器代码使用Auth授权认证的方法完成登录

 

 

视图中显示错误

 

 

接下来,我们可以在后台首页和登录方法中,继续完善登录操作,例如登录次数

  1. 完善记住登录功能。

 

 

  1. 完善登录次数

 

 

3.1 使用中间件完成防FQ

3.1.1 创建中间件

 

 

3.1.2 把中间件注册到项目中

 

 

3.1.3 在路由中调用中间件

 

 

3.1.4 中间件检测用户是否已经登录了

 

 

 

3.2 输出当前管理员的权限菜单【作业】

 

对于用户的权限的防FQ,我们设置在后台功能完善的差不多的时候,再讲。

 

 

 

 

 

 

4. 会员管理

 

 

 

5. 专业和课程模块

专业分类的CURD

专业管理的CURD

点播课程的CURD

点播课时的CURD

 

6. 直播课程

 

 

7. 前台播放视频 显示直播

posted @ 2017-09-24 09:01  奋斗的黑蜗牛1号  阅读(889)  评论(0)    收藏  举报