亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

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

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

環(huán)境配置:

系統(tǒng):linux

語言:php

框架:Laravel 5.8

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

 

擴展包名稱:

Zizaco/Entrust

安裝配置:

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

// 2. 在config/App.php文件 [providers]數(shù)組中添加一項:
ZizacoEntrustEntrustServiceProvider::class,
  
// 3.  在config/app.php文件 [aliases]數(shù)組中添加一項:
'Entrust'   => ZizacoEntrustEntrustFacade::class,
  
// 4. 生成遷移文件(這一步之前必須配置好數(shù)據(jù)庫連接)
 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. 這時數(shù)據(jù)庫中會創(chuàng)建4個表
      1. permissions -----------權限表
      2. permission_role ------ 權限角色關系表
      3. roles ------------------ 角色表
      4. role_user ------------- 角色用戶關系表

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

創(chuàng)建數(shù)據(jù)、模擬用戶登陸

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

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

Table roles 數(shù)據(jù)

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

        // 創(chuàng)建第二個權限
        $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 數(shù)據(jù)

  1. 為角色分配權限
public function setRolesPerm()
    {
        // 1. 設置 admin 角色權限
        // 獲取角色ID
        $user_id     = Role::where('name', 'admin')->first(['id']);
        // 獲取所有權限,讓admin擁有所有權限
        $permissions = Permission::get(['id']);
        // 向 permission_role 表中寫入數(shù)據(jù)
        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 表中寫入數(shù)據(jù)
        DB::table('permission_role')->insert([
          'permission_id' => $per->id,
          'role_id'       => $user_id->id,
        ]);
    }
PHP Laravel框架用戶權限管理,按鈕級別控制(詳細)

Table permission_role 數(shù)據(jù)

  1. 創(chuàng)建用戶
public function createUser()
    {
        $userModel           = new User();
        $userModel->name     = 'admin';
        $userModel->email    = '[email protected]';
        $userModel->password = '123456'; //未做加密處理,生產(chǎn)環(huán)境請做加密
        $userModel->save();
        $userModel           = new User();
        $userModel->name     = 'test';
        $userModel->email    = '[email protected]';
        $userModel->password = '123456'; //未做加密處理,生產(chǎn)環(huán)境請做加密
        $userModel->save();
    }

 

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

Table users 數(shù)據(jù)

  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.根據(jù)路徑 /vendor/zizaco/entrust/src/config.php

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

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

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

Table role_user 數(shù)據(jù)

  1. 登陸
 public function Login()
    {
        // 此處應接受前端數(shù)據(jù)進行驗證
        // 這邊不再贅述 直接模擬登陸
        // 用戶 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');
    }

至此,測試所需數(shù)據(jù)全部創(chuàng)建完畢

權限的使用

  1. 根據(jù)上面設置的角色組的權限建立測試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. 后端對于角色的判斷,不同角色執(zhí)行不同代碼
public function judgeRoles()
    {
        // 擁有 admin 角色的用戶執(zhí)行
        if (session('user_info')->hasRole('admin')) {
            // 業(yè)務代碼
            return 'admin角色業(yè)務代碼執(zhí)行完畢';
        }

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

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

以上都為測試學習代碼,實際生產(chǎn)環(huán)境中還需要根據(jù)業(yè)務需求對代碼進行修改整合,但是基礎的權限設計功能已經(jīng)實現(xiàn)。

謝謝!

最后的話:

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

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

祝大家技術一節(jié)更比一節(jié)高!

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

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

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

運動步數(shù)有氧達人2018-06-03

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

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

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

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