• laravel8.5与layuiadmin整合(14)


    66.设计左侧栏目,以便用权限控制显示与操作
    修改/app/Providers/AppServiceProvider.php
    如下

    class AppServiceProvider extends ServiceProvider
    {
        // 
    
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            //
            view()->composer(['admin.layout'], \App\Http\ViewComposers\SiderbarComposer::class);
        }
    }

    67.建立上面的共享视图
    /app/Http/ViewComposers/SiderbarComposer.php

    namespace  App\Http\ViewComposers;
    
    use Illuminate\Support\Facades\DB;
    use Illuminate\View\View;
    
    class SiderbarComposer {
        public function compose(View $view) {
            // 返回的导航数组
            $sidebar = [];
            $topMenus = DB::table('permissions')->where(['parent_id'=>0])->select()->get()->toArray();
            if($topMenus) {
                $top_ids = [];
                foreach ($topMenus as $row) {
                    array_push($top_ids,$row->id);
                    $sidebar[$row->id] = $row;
                }
                $secMenus = DB::table('permissions')
                    ->whereIn('parent_id', $top_ids)
                    ->get();
    
                if($secMenus){
                    foreach ($secMenus as $sec_row) {
                        $sidebar[$sec_row->parent_id]->children[] = $sec_row;
                    }
                }
            }
            $view->with('sidebar',$sidebar);
        }
    }

    68.在模板中添加权限和显示
    /resources/views/admin/layout.blade.php

                        @foreach($sidebar as $menu)
                        @can($menu->name)
                        <li data-name="user" class="layui-nav-item">
                            <a href="javascript:;" lay-tips="{{$menu->display_name}}" lay-direction="2">
                                <i class="layui-icon layui-icon-user"></i>
                                <cite>{{$menu->display_name}}</cite>
                            </a>
                            <dl class="layui-nav-child">
                                @isset($menu->children)
                                @if($menu->children)
                                @foreach($menu->children as $subMenu)
                                @can($subMenu->name)
                                <dd data-name="{{$subMenu->name}}">
                                    <a lay-href="{{route($subMenu->name)}}">{{$subMenu->display_name}}</a>
                                </dd>
                                @endcan
                                @endforeach
                                @endif
                                @endisset
                            </dl>
                        </li>
                        @endcan
                        @endforeach

    69.为了方便测试权限,先在路由中添加一些模板
    /routes/web.php

    // 产品管理
    Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
        // 产品列表管理
        Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index'])
            ->name('admin.products');
    
    });
    
    
    // 仓库管理
    Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
        // 仓库列表管理
        Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index'])
            ->name('admin.warehouse');
        // 仓库库存管理
        Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock'])
            ->name('admin.warehouse.stock');
    });
    
    // 订单管理
    Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
        // 订单列表管理
        Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index'])
            ->name('admin.orders');
        // 订单物流管理
        Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index'])
            ->name('admin.logistic');
    });
    
    // 采购管理
    Route::group(['prefix' => 'admin','middleware'=>'auth'],function() {
        // 采购列表管理
        Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index'])
            ->name('admin.purchase');
        // 供应商管理
        Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers'])
            ->name('admin.purchase.suppliers');
    });

    70.根据上面的路由,分别建立对应的控器和模板即可

    71.方便模板显示登陆用户名,修改
    /app/Http/Controllers/Admin/IndexController.php

        public function layout() {
            $userInfo = Auth::user();
            $user['id'] = $userInfo->id;
            $user['name'] = $userInfo->name;
             return view('admin.layout',compact('user'));

    72.修改显示名称
    /resources/views/admin/layout.blade.php
    //
    <cite>贤心-{{$user['name']?? ''}}</cite>

    73.分别添加路由对应的权限

    74.再在相关路由加上权限即可
    /routes/web.php
    修改如下

    // 系统管理
    Route::group(['prefix' => 'admin','middleware' => ['auth','permission:system.manage']],function() {
    
        Route::group(['middleware' => ['permission:admin.user']], function() {
            // 系统用户列表
            Route::get('/user',[App\Http\Controllers\Admin\UserController::class, 'index'])
                ->name('admin.user');
            //添加系统用户
            Route::get('/create',[App\Http\Controllers\Admin\UserController::class, 'create'])
                ->name('admin.user.create')->middleware('permission:admin.user.create');
            // 获取系统用户列表
            Route::get('/data',[App\Http\Controllers\Admin\UserController::class, 'data'])
                ->name('admin.data');
            //删除系统用户
            Route::delete('user/destroy',[App\Http\Controllers\Admin\UserController::class, 'destroy'])
                ->name('admin.user.destroy')->middleware('permission:admin.user.destroy');
            //保存用户
            Route::post('/store',[App\Http\Controllers\Admin\UserController::class, 'store'])
                ->name('admin.user.store')->middleware('permission:admin.user.create');
            //编辑用户
            Route::get('user/{id}/edit',[App\Http\Controllers\Admin\UserController::class, 'edit'])
                ->name('admin.user.edit')->middleware('permission:admin.user.edit');
            // 保存编辑用户
            Route::put('user/{id}/update',[App\Http\Controllers\Admin\UserController::class, 'update'])
                ->name('admin.user.update')->middleware('permission:admin.user.edit');
            // 给人员分配角色
            Route::get('user/{id}/role',[App\Http\Controllers\Admin\UserController::class, 'role'])
                ->name('admin.user.role')->middleware('permission:admin.user.assignRole');
            Route::put('user/{id}/assignRole',[App\Http\Controllers\Admin\UserController::class, 'assignRole'])
                ->name('admin.user.assignRole')->middleware('permission:admin.user.assignRole');
            // 给人员分配权限
            Route::get('user/{id}/permission',[App\Http\Controllers\Admin\UserController::class, 'permission'])
                ->name('admin.user.permission')->middleware('permission:admin.user.assignPermission');
            Route::put('user/{id}/assignPermission',[App\Http\Controllers\Admin\UserController::class, 'assignPermission'])
                ->name('admin.user.assignPermission')->middleware('permission:admin.user.assignPermission');
        });
    
    
    });
    
    // 角色管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() {
    
        Route::group(['middleware' => ['permission:admin.role']],function() {
            // 展示角色列表
            Route::get('role',[App\Http\Controllers\Admin\RoleController::class,'index'])
                ->name('admin.role');
            // 获取角色数据
            Route::get('role/data',[App\Http\Controllers\Admin\RoleController::class,'data'])
                ->name('admin.role.data');
            // 添加角色
            Route::get('role/create',[App\Http\Controllers\Admin\RoleController::class,'create'])
                ->name('admin.role.create')->middleware('permission:admin.role.create');
            // 保存添加的角色
            Route::post('role/store',[App\Http\Controllers\Admin\RoleController::class,'store'])
                ->name('admin.role.store')->middleware('permission:admin.role.create');
            //编辑角色
            Route::get('role/{id}/edit',[App\Http\Controllers\Admin\RoleController::class,'edit'])
                ->name('admin.role.edit')->middleware('permission:admin.role.edit');
            // 保存编辑
            Route::put('role/{id}/update',[App\Http\Controllers\Admin\RoleController::class,'update'])
                ->name('admin.role.update')->middleware('permission:admin.role.edit');
            //删除角色
            Route::delete('role/destroy',[App\Http\Controllers\Admin\RoleController::class, 'destroy'])
                ->name('admin.role.destroy')->middleware('permission:admin.role.destroy');
    
            //修改角色的拥有的权限
            Route::get('role/{id}/permission',[App\Http\Controllers\Admin\RoleController::class,'permission'])
                ->name('admin.role.permission')->middleware('permission:admin.role.assignPermission');
            // 保存角色修改的权限
            Route::put('role/{id}/assignPermission',[App\Http\Controllers\Admin\RoleController::class,'assignPermission'])
                ->name('admin.role.assignPermission')->middleware('permission:admin.role.assignPermission');
        });
    
    });
    
    // 权限管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:system.manage']],function() {
        Route::group(['middleware' => ['permission:admin.permission']],function() {
            // 权限展示
            Route::get('permission', [App\Http\Controllers\Admin\PermissionController::class, 'index'])
                ->name('admin.permission');
            // 获取权限数据
            Route::get('permission/data', [App\Http\Controllers\Admin\PermissionController::class, 'data'])
                ->name('admin.permission.data');
            //创建权限
            Route::get('permission/create', [App\Http\Controllers\Admin\PermissionController::class, 'create'])
                ->name('admin.permission.create')->middleware('permission:admin.permission.create');
            // 保存新创建的权限
            Route::post('permission/store', [App\Http\Controllers\Admin\PermissionController::class, 'store'])
                ->name('admin.permission.store')->middleware('permission:admin.permission.create');
            //编辑权限
            Route::get('permission/{id}/edit', [App\Http\Controllers\Admin\PermissionController::class, 'edit'])
                ->name('admin.permission.edit')->middleware('permission:admin.permission.edit');
            // 保存编辑的权限
            Route::put('permission/{id}/update', [App\Http\Controllers\Admin\PermissionController::class, 'update'])
                ->name('admin.permission.update')->middleware('permission:admin.permission.edit');
            // 删除权限
            Route::delete('permission/destroy', [App\Http\Controllers\Admin\PermissionController::class, 'destroy'])
                ->name('admin.permission.destroy')->middleware('permission:admin.permission.destroy');
        });
    });

    到目前为止,系统管理的功能基本使用,为了隐藏一些没有权限的操作展示,
    分别对 blade模板文件加上权限判断
    比如系统用户模板
    /resources/views/admin/user/index.blade.php
    分别在增加,删除,修改处加上判断

        @can('admin.user.destroy')
        <button class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删 除</button>
        @endcan
        @can('admin.user.create')
        <a class="layui-btn layui-btn-sm" href="{{ route('admin.user.create') }}">添 加</a>
        @endcan

    至此已经完成
    以下添加一些功能测试
    添加路由
    /routes/web.php

    // 产品管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:products.manage']],function() {
        // 产品列表管理
        Route::get('products/index',[App\Http\Controllers\Admin\ProductsController::class,'index'])
            ->name('admin.products')->middleware('permission:admin.products');
        // 获取产品列表数据
        Route::get('products/data', [App\Http\Controllers\Admin\ProductsController::class, 'data'])
            ->name('admin.products.data')->middleware('permission:admin.products');
        // 产品新增
        Route::get('products/create',[App\Http\Controllers\Admin\ProductsController::class,'create'])
            ->name('admin.products.create')->middleware('permission:admin.products.create');
    
        // 新增保存
        Route::post('products/store',[App\Http\Controllers\Admin\ProductsController::class,'store'])
            ->name('admin.products.store')->middleware('permission:admin.products.create');
        // 产品编辑
        Route::get('products/{id}/edit',[App\Http\Controllers\Admin\ProductsController::class,'edit'])
            ->name('admin.products.edit')->middleware('permission:admin.products.edit');
        // 产品编辑保存
        Route::put('products/{id}/update',[App\Http\Controllers\Admin\ProductsController::class,'update'])
            ->name('admin.products.update')->middleware('permission:admin.products.edit');
        // 产品删除
        Route::delete('products/destroy',[App\Http\Controllers\Admin\ProductsController::class,'destroy'])
            ->name('admin.products.destroy')->middleware('permission:admin.products.destroy');
        // 编辑产品状态
        Route::put('products/changeStatus',[App\Http\Controllers\Admin\ProductsController::class,'changeStatus'])
            ->name('admin.products.changeStatus')->middleware('permission:admin.products.edit');
    
        // 分类管理
        // 分类列表
        Route::get('category/index',[App\Http\Controllers\Admin\CategoryController::class,'index'])
            ->name('admin.category')->middleware('permission:admin.category');
    
        // 获取分类数据
        Route::get('category/data', [App\Http\Controllers\Admin\CategoryController::class, 'data'])
            ->name('admin.category.data')->middleware('permission:admin.category');
        // 分类新增
        Route::get('category/create',[App\Http\Controllers\Admin\CategoryController::class,'create'])
            ->name('admin.category.create')->middleware('permission:admin.category.create');
        // 新增分类保存
        Route::post('category/store',[App\Http\Controllers\Admin\CategoryController::class,'store'])
            ->name('admin.category.store')->middleware('permission:admin.category.create');
        // 分类编辑
        Route::get('category/{id}/edit',[App\Http\Controllers\Admin\CategoryController::class,'edit'])
            ->name('admin.category.edit')->middleware('permission:admin.category.edit');
        // 分类编辑保存
        Route::put('category/{id}/update',[App\Http\Controllers\Admin\CategoryController::class,'update'])
            ->name('admin.category.update')->middleware('permission:admin.category.edit');
        // 分类删除
        Route::delete('category/destroy',[App\Http\Controllers\Admin\CategoryController::class,'destroy'])
            ->name('admin.category.destroy')->middleware('permission:admin.category.destroy');
    });
    
    
    // 仓库管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:warehouse.manage']],function() {
        // 仓库列表管理
        Route::get('warehouse/index',[App\Http\Controllers\Admin\WarehouseController::class,'index'])
            ->name('admin.warehouse')->middleware('permission:admin.warehouse');
        // 仓库库存管理
        Route::get('warehouse/stock',[App\Http\Controllers\Admin\warehouseController::class,'stock'])
            ->name('admin.warehouse.stock')->middleware('permission:admin.warehouse.stock');
    });
    
    // 订单管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:orders.manage']],function() {
        // 订单列表管理
        Route::get('orders/index',[App\Http\Controllers\Admin\OrdersController::class,'index'])
            ->name('admin.orders')->middleware('permission:admin.orders');
        // 订单物流管理
        Route::get('logistic/index',[App\Http\Controllers\Admin\LogisticController::class,'index'])
            ->name('admin.logistic')->middleware('permission:admin.logistic');
    });
    
    // 采购管理
    Route::group(['prefix' => 'admin','middleware'=>['auth','permission:purchase.manage']],function() {
        // 采购列表管理
        Route::get('purchase/index',[App\Http\Controllers\Admin\PurchaseController::class,'index'])
            ->name('admin.purchase')->middleware('permission:admin.purchase');
        // 供应商管理
        Route::get('purchase/suppliers',[App\Http\Controllers\Admin\PurchaseController::class,'suppliers'])
            ->name('admin.purchase.suppliers')->middleware('permission:admin.purchase.suppliers');
    });
    //文件上传接口
    Route::post('uploadImg', [App\Http\Controllers\PublicController::class,'uploadImg'])->name('uploadImg');

    同于上传到 storage/app/public 目录的文件可以被外部访问,还要执行以下命令

    php artisan storage:link

    该命令会在项目根目录下的 public 中创建一个软链 storage
    指向 storage/app/public,这样,后者下面的文件才可以真正通过 Web 路径访问。

    76.分别添加产品表products和产品分类表category

    CREATE TABLE `products` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(255) DEFAULT NULL,
      `keywords` varchar(255) DEFAULT NULL,
      `description` varchar(255) DEFAULT NULL,
      `category_id` int(11) DEFAULT NULL COMMENT '分类ID',
      `content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci,
      `flag` tinyint(1) DEFAULT '1' COMMENT '1-启用,0-关闭',
      `created_at` datetime DEFAULT NULL,
      `updated_at` datetime DEFAULT NULL,
      `author` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `title` (`title`),
      KEY `category_id` (`category_id`),
      KEY `flag` (`flag`),
      KEY `author` (`author`),
      KEY `created_at` (`created_at`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品表';
    
    CREATE TABLE `category` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(50) DEFAULT NULL,
      `name_cn` varchar(255) DEFAULT NULL COMMENT '英文名称',
      `parent_id` int(11) DEFAULT '0' COMMENT '父类ID',
      `author` varchar(50) DEFAULT NULL,
      `created_at` datetime DEFAULT NULL,
      `updated_at` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `parent_id` (`parent_id`),
      KEY `created_at` (`created_at`),
      KEY `author` (`author`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品分类';

    根据对应的layuiadmin修改对应的模板即可
    最后,依次加上对应的权限
    至次,整合完成

    安装 ueditor
    https://github.com/overtrue/laravel-ueditor

    以下说明route/api.php

    77. 在route/api.php 添加

    // 测试API功能
    Route::group(['prefix' => 'test'], function() {
        Route::get('index',[App\Http\Controllers\Api\TestController::class,'index']);
    });

    78.新增 /app/Http/Controllers/Api/TestController.php

    namespace App\Http\Controllers\Api;
    
    use App\Http\Controllers\Controller;
    
    class TestController extends Controller {
        public function index() {
            echo __CLASS__ . '  -> ' .  __METHOD__;
        }
    }

    直接访问

    域名/api/test/index

    即可

    79.命令行执行laravel程序
    比如获取最新10个产品
    执行以下命令

    php artisan make:command products/getProductsList 10 0

    此时会生成文件 /app/Console/Commands/products/getProductsList.php

    80.在文件中

    /app/Console/Kernel.php
    添加如下

    class Kernel extends ConsoleKernel
    {
        //  
        protected $commands = [
            \App\Console\Commands\products\command:products_getProductsList
        ];
    
       //
    }

    81.打开文件
    /app/Console/Commands/products/getProductsList.php
    修改如下方法

    // 
    class getProductsList extends Command
    {
    // 两个参数
    protected $signature = 'command:products_getProductsList {num} {start}'; protected $description = '获取最新10个产品'; /** * Execute the console command. * * @return int */ public function handle() {

            $num = $this->argument('num');
            $start = $this->argument('start');

    $products = DB::table('products')->take($num)->get();
                    foreach ($products as $product) {
                    echo $product->id . ':' . $product->title . "\n";
                }
            }
            //     
    }

    执行以下脚本即可

    php ./artisan command:products_getProductsList 10 0

    82.生在迁移数据表文件
    参考如下
    https://github.com/oscarafdev/migrations-generator

    php artisan migrations:generate

    php artisan migrate:generate table1,table2,table3,table4,table5

  • 相关阅读:
    FatMouse's Speed --hdu
    poj 1182--食物链 (并查集)
    HDU
    CodeForces
    LightOJ
    HDU2717:Catch That Cow(BFS 队列)
    HDU
    51Nod
    bash: ifconfig: command not found 解决办法--------仅供参考
    关于“ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中)
  • 原文地址:https://www.cnblogs.com/lin3615/p/15803032.html
Copyright © 2020-2023  润新知