前言:
五一长假马上就要到了,自己身在学校,而且身份证也弄不见了,所以也没有旅游什么的,想想五一假期总该做点什么吧,刚好最近又入门了laravel,于是利用这个小长假去感受一下laravel,于是就有了做博客后台这样的想法。。。。事不宜迟,赶紧开始吧
一:Git的使用
2021年5月1日 00:05:07,稍稍学了Git的使用,全在之前的文章了,这里就不多写了
二:domo的下载
本着说用最经典的X-admin的demo,但是想想不够酷炫,于是用自己下的一个模板,但是对于jQuery,layui的不熟悉,BUG一个接一个,我都害怕出BUG了。。。想哭,看来前端是时候该进步进步了
三:更新日志
1.登录(5.1日)
前台的表单验证:前台的表单验证主要包括:
后台的表单验证:通过路由跳转
<?php //后台登录路由 Route::get('login','LoginController@login'); //处理后台登录的路由 Route::post('dologin','LoginController@doLogin'); //加密路由 Route::get('jiami','LoginController@jiami');
在控制器文件夹创建一个新的控制器为LoginControler
<?php namespace App\Http\Controllers\Admin; use App\Model\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use think\response\Redirect; class LoginController extends Controller { //后台登录页面 public function login() { return view('admin.login'); } //处理用户登录到方法 public function doLogin(Request $request) { //1接受表单提交的数据 $input =$request->except('_token'); #进行表单验证 // 在手册的表达验证中找到 手动创建验证器 // $validator = Validator::make('需要验证的表单数据','验证规则','错误提示信息'); $rule = [ 'username'=>'required|between:4,18', //required为必须有输入,between是在几个数字之间,这是手册里自带的规则 'password'=>'required|between:4,18|alpha_dash', ]; //由于回显是英文,我们需要中文提示 $msg = [ 'username.required'=>"用户名必须输入", 'username.between'=>"用户名必须在4-18位之间", 'password.required'=>"密码不能为空", 'password.between'=>"密码必须在4-18位之间", 'password.alpha_dash'=>"密码必须是数字字母或者下划线", ]; $validator = Validator::make($input,$rule,$msg); if ($validator->fails()) { return redirect('admin/login') ->withErrors($validator) ->withInput(); } // 传给 make 方法的第一个参数是需要验证的数据。第二个参数则是该数据的验证规则。 // //如果验证失败,则可以使用 withErrors 方法把错误消息闪存到 Session 。使用这个方法进行重定向后, $errors 变量会自动和视图共享,你可以把这些消息显示给用户。 // withErrors 方法接收验证器、MessageBag 或 PHP Array #3表单验证通过后做数据处理,是否存在用户以及密码 $user = User::where('user_name',$input['username'])->first(); // 要查看特定字段的第一个错误消息,可以使用 first 方法 if(!$user){ return redirect('admin/login')->with('error','用户名输入错误'); } if ($input['password']!=Crypt::decrypt($user->user_pass)){ return redirect('admin/login')->with('error','密码输入错误'); } // 4.用户信息存到seesion中 session()->put('user',$user); // 5.跳转到后台首页 return redirect('admin/index'); } public function jiami() { // 常用的加密方法 // 1.md5加密,生成一个32位的字符串 // $str ='salt'.'123456'; // 其中salt是自己定义的一个加密的算法,保证安全 // return md5($str); //// 2.hash加密 // $str = '123456'; // $hash = Hash::make($str); // //解密方法 // if(Hash::check($str,$hash)){ // return '密码正确'; // }else{ // return '密码错误'; // } // 3.crypt加密 $str = '123456'; $crypt_str =Crypt::encrypt($str);
5.8日:因为在存session的时候 。不小心把$user加双引号了,导致后面读取seesion值的时候一直为空,以至于查不出哪里出错了,所以对于小错误一定要小心
创建用户User模块
<?php namespace App\Model; use Illuminate\Database\Eloquent\Model; class User extends Model { //这是用户模型 // 1.关联的数据表 public $table = 'blog_user'; //2主键 public $primaryKey ='user_id'; //3.可以操作的字段 public $fillable =[ 'user_name','user_pass','email','phone' ]; // 4.不允许操作的字段 public $guarded = []; // 5.是否维护create_at 和updated_at字段 public $timestamps = false; }
至此,登录的系统的完成了
2.注册(5.2)
对于注册功能,我们建立一个资源路由
Route::resource('user','UserController'); //资源路由 用php artisan route:list 查看相关的admin/user的操作 Route::post('user/{id}','UserController@updates'); //因为有些路由的url确实。。令人无语,于是自己又做一个 Route::get('user/del/{id}','UserController@destroys');
下面是资源路由对应的控制器的方法
<?php namespace App\Http\Controllers\Admin; use App\Model\User; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Crypt; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ //创建控制器自带的几种方法 //第一个 获取用户列表 public function index(Request $request) { // //查询 // $input = $request->all(); // dd($input); User::orderBy('user_id','asc') ->where(function ($query) use($request){ $username =$request->input('username'); if (!empty($username)){ $query->where('user_name','like','%'.$username.'%'); } }) ->paginate($request->input('num')?$request->input('num'):3); $user =User::paginate(3); //这里不用get用这个可以实现分页 return view('admin.user.list',compact('user','request')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ //返回用户添加页面 public function create() { // return view('admin.user.add'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ //执行添加操作 public function store(Request $request) { // 1.接受前台表单提交的数据 $input =$request->all(); //2.进行表单验证 未进行 //3.添加数据到数据库的user表 $username = $input['email']; $pass = Crypt::encrypt($input['password']); $res = User::create(['user_name'=>$username,'user_pass'=>$pass,'email'=>$input['email']]); if($res){ $data = [ 'status'=>0, 'message' => '添加成功', ]; }else{ $data = [ 'status'=>1, 'message' => '添加失败', ]; } json_encode($data); return $data; // 获取客户端提交的表单数据 } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ //显示数据 public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ //返回一个修改页面 public function edit(Request $request,$id) { $user = User::find($id); return view('admin.user.edit',compact('user')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ //执行修改操作 public function updates(Request $request, $id) { // 1.根据id获取要修改的记录 $user = User::find($id); //2.获取要修改的用户名 $username =$request->input('username'); $user->user_name =$username; $res = $user->save(); if ($res){ $data = [ 'status'=>0, 'message'=>"修改成功" ]; }else{ $data = [ 'status'=>1, 'message'=>"修改失败"]; } return $data; } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ //执行删除操作 public function destroys($id) { $user = User::find($id); $res = $user->delete(); if($res){ $data = [ 'status'=>0, 'message'=>"删除成功" ]; }else{ $data = [ 'status'=>1, 'message'=>"删除失败" ]; } return $data; dump(1); } }
通过用户路由可以对用户进行各种添加删除操作
3.前端页面处理(5.3):
主要是将前端的后台页面分为三个文件,一个为左侧的功能栏(aside),和html头部(header),尾部(footer),将css,JavaScript的代码分离,以方便管理
4.角色模型处理(5.4)
RBAC权限原理
RBAC 是基于角色的访问控制(Role-Based Access Control
)在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
RBAC 认为授权实际上是Who
、What
、How
三元组之间的关系,也就是Who
对What
进行How
的操作,也就是“主体”对“客体”的操作。
Who:是权限的拥有者或主体(如:User,Role)。
What:是操作或对象(operation,object)。
How:具体的权限(Privilege,正向授权与负向授权)。
然后 RBAC 又分为RBAC0、RBAC1、RBAC2、RBAC3
- RBAC0:是RBAC的核心思想。
- RBAC1:是把RBAC的角色分层模型。
- RBAC2:增加了RBAC的约束模型。
- RBAC3:其实是RBAC2 + RBAC1。
那么开始创建相关角色权限数据库吧
那么开始创建Role模块
我好想省略怎么办。。。。。。
创建Role模型 关联数据库
创建Permission模型,关联相关数据库
创建RoleController控制器
<?php namespace App\Http\Controllers\Admin; use App\Model\Permission; use App\Model\Role; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class RoleController extends Controller { public function index() { //1.获取所有的角色列表 $role = Role::get(); return view('admin.role.list',compact('role')); } //返回添加页 public function create() { return view('admin.role.add'); } public function store(Request $request) { //1.获取数据 $input =$request->except('_token'); //2.进行表单验证 //3.将数据添加到数据库 $res = Role::create($input); if($res){ return redirect('admin/role'); }else{ return back()->with('msg','添加失败'); } } //获取授权页面 public function auth($id) { //获取当前角色 $role =Role::find($id); //获取所有权限列表 $perms =Permission::get(); //当前角色拥有的权限 $owm_perms = $role->permission; // dd($owm_perms); //角色拥有的权限的ID $owm_pers = []; foreach ($owm_pers as $v){ $owm_pers[] = $v->id; } return view('admin.role.auth',compact('role','perms','owm_pers')); }
哇哦,真不错( ni shi bu shi zhi jie jie de tu fang shang qu de ?)富强 民主 文明 和谐
你这拼音我拼不出来
你是不是直接截的图发上去的(翻译)
我自己写的