laravel权限管理实操01

本文详细介绍了后端开发中权限管理和用户认证的实现方式,包括角色(Role)的增删改查,权限分配,以及用户(User)的登录认证流程。通过具体的代码示例,展示了如何使用PHP进行权限验证,角色编辑,以及用户信息设置等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php

namespace App\Http\Controllers\Admin;

use App\Role;
use App\User;
use Gregwar\Captcha\CaptchaBuilder;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\DB;

class AdminController extends Controller
{
    //

    public function login(Request $request){

        if($request->isMethod('POST')){

            $code = $request->input('code');
            $_code = $request->session()->get('adminCode');
            if($_code!=$code){
              return   response()->json(['status'=>'false','message'=>'验证码错误!']);
            }
            $username = trim($request->input('username'));
            $password = sha1(md5(trim($request->input('password'))));

            $user = User::whereRaw('username =? AND password = ?',[$username,$password])->first();

            //

            if(false==$user){
                $ret = ['status'=>'false','message'=>'用户名和密码错误!'];
            }else{


                $request->session()->put('admin_id',$user->id);
                $request->session()->put('admin_username',$user->username);
                $salt = sha1($user->id.time().$user->username);
                User::where('id',$user->id)->update(['salt'=>$salt]);
                $request->session()->put('salt', $salt);
                $ret = ['status'=>'success','message'=>'登录完成!'];

            }
            return response()->json($ret);
        }

       return view('admin.login');

    }

    public function index(){

      return view('admin.index');
    }

    public function info(){


        return '欢迎来到后台!';
    }

    public function role(){

        $roles = Role::all();



        return view('admin.role',['roles'=>$roles]);
    }

    public function roleadd(Request $request){

        if($request->isMethod('post')){


            $name = $request->input('name');
            //$ret = DB::table('role')->insert(['name'=>$name,'status'=>1]);
            $ret = Role::create(['name'=>$name,'status'=>1]);
            if($ret){
                $ret = ['status'=>'success'];
            }else{
                $ret = ['status'=>'false'];
            }

            return $ret;
        }

        return view('admin.roleadd');
    }

    //角色修改
    public function roleedit(Request $request){

        $id = $request->input('id');
        if($request->isMethod('post')){

           $name = $request->input('name');

            $role = Role::find($id);
            $role->name = trim($request->input('name'));
            $res = $role->save();

            if($res){
                $ret = ['status'=>'success'];
            }else{
                $ret = ['status'=>'false'];
            }
            return $ret;
            //dd($data);

        }
        $role = Role::find($id);
        return view('admin.role-edit',['role'=>$role]);


    }
    //角色权限设置方法
    public function  roleset(Request $request){
        $id = $request->input('id');

        if($request->isMethod('post')){

            $role_id = $request->input('id');
            $accessId = $request->input('accessId',[]);



            //先把已有的功能权限取出
            $TakenAccess = DB::table('role_access')->where('role_id', $role_id)->get();
            $TakenAccess= $TakenAccess->toArray();



            $TakenId = array_column($TakenAccess,'access_id');
            //dd($TakenId);
            //新id在已有的ID上做对比将老的id取出,然后删除

            $deleteId = array_diff($TakenId,$accessId);
            //dd($deleteId);

            foreach ($deleteId as $v){

               DB::table('role_access')->where('access_id',$v)->delete();
            }

            //exit();


            //新功能点

            //dd($TakenId);
            $_NewaccessId = array_diff($accessId,$TakenId);//$accessId;
            //$_NewaccessId = $accessId;


            //保存新功能ID
            foreach ($_NewaccessId as $v){

                DB::table('role_access')->insert([
                    'role_id'=>$role_id,
                    'access_id'=>$v,
                ]);
            }

            return response()->json(['status'=>'success']);


        }

        $role = DB::table('role')->where('id',$id)->first();


        if(false==$role){
            return redirect()->Route('role-home');
        }



        $access = DB::table('access')->where('status',1)->get();

        $TakenAccess = DB::table('role_access')->where('role_id',$id)->get();
        $TakenAccess= $TakenAccess->toArray();

        $TakenId = array_column($TakenAccess,'access_id');
        //dd($TakenId);

        return view('admin.role-set',['role'=>$role,'access'=>$access,'Taken'=>$TakenId]);


    }

    //功能管理
    public function access(Request $request){
            $access = DB::table('access')->get();
            return view('admin.access-list',['access'=>$access]);

    }

    public function accessadd(Request $request){
        if($request->isMethod('post')){

            $title = $request->input('title');
            $route = trim($request->input('route'));
            $res = DB::table('access')->insert(['title'=>$title,'route'=>$route,'status'=>1]);
            if($res){
                $ret = ['status'=>'success','message'=>'增加完成!'];

            }else{
                $ret = ['status'=>'false','message'=>'增加失败!'];
            }
            return response()->json($ret);//json_encode($ret);

        }



        return view('admin.access-add');
    }
    public function accessEdit(Request $request){
        $id = $request->input('id');

        if($request->isMethod('post')){

            $title = $request->input('title');
            $route = trim($request->input('route'));
            $id = trim($request->input('id'));
            $num = DB::table('access')->where('id',$id)->update(['title'=>$title,'route'=>$route]);
            if(!$num){
                $ret = ['status'=>'false'];
            }else{
                $ret = ['status'=>'success'];
            }
            return response()->json($ret);
        }

        $access = DB::table('access')->where('id',$id)->first();
        return view('admin.access-edit',['access'=>$access]);
    }

    //RBAC用户管理
    public function userHome(Request $request){

        $users = DB::table('user')->whereRaw('manage=? OR is_admin=?',[1,1])->get();

        //dd($users);
        return view('admin.user-home',['users'=>$users]);


    }

    public function logout(Request $request){

        $request->session()->flush();

        return redirect()->Route('admin-login');

    }

    public function tips(){

        return view('tips');
    }

    public function userSet(Request $request){

        $user_id = $request->input('id');

        if($request->isMethod('post')){


            $truename =$request->input('name');
            $roleId = $request->input('roleId',[]);

            $user_id = $request->input('id');
            $user = User::find($user_id);
            $user->truename =  $truename;
            $user->save();


            $_roleId = DB::table('role_user')->where('user_id',$user_id)->get();
            $_roleId = array_column($_roleId->toArray(),'role_id');


            //delete old roler 删除老的角色
            $_oldRoleId = array_diff($_roleId,$roleId);
            foreach ($_oldRoleId as $v){

                DB::table('role_user')->whereRaw('user_id=? AND role_id=?',[$user_id,$v])->delete();
            }

            $_newRoleId = array_diff($roleId,$_roleId);

            //dd($_newRoleId);

            foreach ($_newRoleId as $v){

                DB::table('role_user')->insert(['user_id'=>$user_id,'role_id'=>$v]);
            }


            return response()->json(['status'=>'success']);



        }

        $user = User::find($user_id);

        $roles = DB::table('role')->get();

        $TakenRole = DB::table('role_user')->where('user_id',$user_id)->get();

        $TakenRole = $TakenRole->toArray();

        $TakenId = array_column($TakenRole,'role_id');

        //dd($TakenId);

        $data = ['user'=>$user,'roles'=>$roles,'TakenId'=>$TakenId];

        return view('admin.user-set',$data);
    }

    public function userAdd(Request $request){

        if($request->isMethod('post')){

            $inputUser = $request->input('email');
            $trunename = $request->input('name');
            $roleids = $request->input('roleId',[]);

            $user = User::whereRaw('email=? OR username=?',[$inputUser,$inputUser])->first();
            if(false ==$user){
                return response()->json(['status'=>'false','message'=>'用户不存在!']);
            }else{
                $user_id = $user->id;
            }



            $res = User::where('id',$user_id)->update(['manage'=>1,'truename'=>$trunename]);


            foreach ($roleids as $v){

                DB::table('role_user')->insert(['user_id'=>$user_id,'role_id'=>$v]);
            }

            return response()->json(['status'=>'success','message'=>'增加成功!']);
        }

        $roles = DB::table('role')->get();//';'

        return view('admin.user-add',['roles'=>$roles,'access'=>[]]);

    }
    public function Captcha(Request $request)
    {



        //生成验证码图片的Builder对象,配置相应属性
        //$builder = new CaptchaBuilder;
        $builder = new CaptchaBuilder();
        //可以设置图片宽高及字体
        $builder->build($width = 120, $height = 50, $font = null);
        //获取验证码的内容
        $phrase = $builder->getPhrase();
        //把内容存入session
        //Session::flash('milkcaptcha', $phrase);
        $request->session()->put('adminCode',$phrase);

        //生成图片
        header("Cache-Control: no-cache, must-revalidate");
        header('Content-Type: image/jpeg');
        $builder->output();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值