日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

環境配置:

系統:linux

語言:php

框架:Laravel 5.8

主要技術:Zizaco/Entrust擴展包,MySQL,PHP,Composer

 

擴展包名稱:

Zizaco/Entrust

安裝配置:

// 1. 在項目根目錄運行
composer require zizaco/entrust

// 2. 在config/App.php文件 [providers]數組中添加一項:
ZizacoEntrustEntrustServiceProvider::class,
  
// 3.  在config/app.php文件 [aliases]數組中添加一項:
'Entrust'   => ZizacoEntrustEntrustFacade::class,
  
// 4. 生成遷移文件(這一步之前必須配置好數據庫連接)
 php artisan entrust:migration
 
// 5. 運行遷移文件
 php artisan migrate
 
// 可能報錯如下:
 IlluminateDatabaseQueryException  : SQLSTATE[42000]: 
 Syntax error or access violation: 1071 Specified key was too long; 
max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
// 解決方式:在 app/Providers/AppServiceProvider.php文件 【boot】方法中 添加:
Schema::defaultStringLength(191);

// 6. 這時數據庫中會創建4個表
      1. permissions -----------權限表
      2. permission_role ------ 權限角色關系表
      3. roles ------------------ 角色表
      4. role_user ------------- 角色用戶關系表

// 7. 在用戶表模型中添加:
 // ...省略多余代碼
 use ZizacoEntrustTraitsEntrustUserTrait;
  class User extends Authenticatable
  {
    use EntrustUserTrait;
    use Notifiable;
    // ...省略多余代碼
  }
// 8. 創建表模型,在項目根目錄運行
 php artisan make:model Model/Role
 php artisan make:model Model/Permission
至此;配置部分完畢!

創建數據、模擬用戶登陸

  1. 創建角色 (創建兩個角色,后期測試會用到)
public function createRoles()
 {
         // 創建第一個角色
        $roleModel               = new Role();
        $roleModel->name         = 'admin'; //角色名稱
        $roleModel->display_name = '管理員'; //角色可讀名稱
        $roleModel->save();

        // 創建第二個角色
        $roleModel               = new Role();
        $roleModel->name         = 'ordinary'; //角色名稱
        $roleModel->display_name = '普通用戶'; //角色可讀名稱
        $roleModel->save();
    }
//roles表->得到 admin ID 為1,ordinary ID為2
PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table roles 數據

  1. 創建權限(可細分的權限)
		// 創建權限
    public function createPermissions()
    {
        // 創建第一個權限
        $permissionModel               = new Permission();
        $permissionModel->name         = 'btn_display'; //權限名稱
        $permissionModel->display_name = '按鈕可見'; //權限可讀名稱
        $permissionModel->save();

        // 創建第二個權限
        $permissionModel               = new Permission();
        $permissionModel->name         = 'menu_display'; //權限名稱
        $permissionModel->display_name = '菜單可見'; //權限可讀名稱
        $permissionModel->save();
    }
// permissions表->得到 btn_display ID為1 menu_display ID為2
PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table permissions 數據

  1. 為角色分配權限
public function setRolesPerm()
    {
        // 1. 設置 admin 角色權限
        // 獲取角色ID
        $user_id     = Role::where('name', 'admin')->first(['id']);
        // 獲取所有權限,讓admin擁有所有權限
        $permissions = Permission::get(['id']);
        // 向 permission_role 表中寫入數據
        foreach ($permissions as $per) {
            DB::table('permission_role')->insert([
              'permission_id' => $per->id,
              'role_id'       => $user_id->id,
            ]);
        }

        // 1. 設置 ordinary 角色權限
        // 獲取角色ID
        $user_id     = Role::where('name', 'ordinary')->first(['id']);
        // 獲取所有權限,讓ordinary只擁有按鈕可見權限
        $permissions = Permission::where('name', 'btn_display')->first(['id']);
        // 向 permission_role 表中寫入數據
        DB::table('permission_role')->insert([
          'permission_id' => $per->id,
          'role_id'       => $user_id->id,
        ]);
    }
PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table permission_role 數據

  1. 創建用戶
public function createUser()
    {
        $userModel           = new User();
        $userModel->name     = 'admin';
        $userModel->email    = '1234567@qq.com';
        $userModel->password = '123456'; //未做加密處理,生產環境請做加密
        $userModel->save();
        $userModel           = new User();
        $userModel->name     = 'test';
        $userModel->email    = '123456789@qq.com';
        $userModel->password = '123456'; //未做加密處理,生產環境請做加密
        $userModel->save();
    }

 

PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table users 數據

  1. 為用戶分配角色組
 public function setUserRole()
    {
        // 1. 賦予 admin 用戶 admin 角色
        $user_info = User::where('name', 'admin')->first();
        $role_info = Role::where('name', 'admin')->first();
        $user_info->attachRole($role_info);

        // 1. 賦予 test 用戶 ordinary 角色
        $user_info = User::where('name', 'test')->first();
        $role_info = Role::where('name', 'ordinary')->first();
        $user_info->attachRole($role_info);
    }

如遇報錯:Class 'AppRole' not found

這是命名空間的問題,兩種解決辦法:

1.把Role.php、Permission.php和用戶表模型User.php 命名空間改為 App

2.根據路徑 /vendor/zizaco/entrust/src/config.php

將return的數組鍵為'role'的值改為項目中Role.php實際命名空間

鍵'user'、'permission'同理 ,便可解決

PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table role_user 數據

  1. 登陸
 public function Login()
    {
        // 此處應接受前端數據進行驗證
        // 這邊不再贅述 直接模擬登陸
        // 用戶 admin 登陸
        $user_info = User::where('name', 'admin')->first();

        // 用戶 test 登陸
        // $user_info = User::where('name', 'test')->first();
        
        // 將用戶信息存入Session
        session(['user_info' => $user_info]);
        return view('index');
    }

至此,測試所需數據全部創建完畢

權限的使用

  1. 根據上面設置的角色組的權限建立測試html(index.blade.php)
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>權限測試</title>
</head>

@if(session('user_info')->can('menu_display'))
<h1>菜單</h1>
@endif
@if(session('user_info')->can('btn_display'))
<button>按鈕</button>
@endif

<body>
</body>
</html>
  1. 用戶 admin 擁有所有權限,登陸之后,應當顯示【菜單】以及【按鈕】,如下圖:

 

PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

用戶 admin 登陸頁面顯示情況

  1. 用戶 test 只擁有 【菜單可見】權限,應當只顯示菜單,如下圖:

 

PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

用戶 test 登陸頁面顯示情況

  1. 后端對于角色的判斷,不同角色執行不同代碼
public function judgeRoles()
    {
        // 擁有 admin 角色的用戶執行
        if (session('user_info')->hasRole('admin')) {
            // 業務代碼
            return 'admin角色業務代碼執行完畢';
        }

        // 擁有 ordinary 角色的用戶執行
        if (session('user_info')->hasRole('ordinary')) {
            // 業務代碼
            return 'ordinary角色業務代碼執行完畢';
      }

至此;關于PHP權限設置就完成了

以上都為測試學習代碼,實際生產環境中還需要根據業務需求對代碼進行修改整合,但是基礎的權限設計功能已經實現。

謝謝!

最后的話:

如果各位大佬有什么更好的方法,請評論或私信我,我會及時回復的,歡迎各位大佬一起來探討技術。

如果各位感覺我的文章對您有幫助的話,請您不要吝嗇您的點贊!

祝大家技術一節更比一節高!

分享到:
標簽:PHP Laravel
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定