0

Laravel 5.2'deki Cartalyst Sentinel'i kullanarak roller rollerinden yararlanmak için bir Laravel acemi (ÇOK acemi) kullanıcısıyım.Laravel ve Sentinel: Yetkilendirme için orta katmanları karıştırın

Yönetici bölümünde üç (veya daha fazla) rolüm var, yani "admin", "agent" ve "writer".

Ben de böyle yani karışık roller erişimi olmalıdır bazı bölümleri: (erişebileceği: admin)

  • kullanıcıları: (yönetici, acente, yazar tüm rollere erişilebilir)

    • panosunu
    • siparişleri (erişebileceği: admin, ajan)
    • sayfa (erişebileceği: admin, yazar)
    • no_admin_here (erişebileceği: ajan, yazar)

    Şu anda sadece iki rolle çalışmayı başardım ama şimdi sıkıştım. (Kernel.php içinde 'kontrol' olarak adlandırılır)

    routes.php

    // only authenticated users can access these pages 
    Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['check']], function(){ 
    
        // these pages are accessible to all roles 
        Route::get('dashboard', ['as' => 'dashboard', function(){ 
         return view('admin/dashboard'); 
        }]); 
    
        // only admin can access this section 
        Route::group(['middleware' => 'admin'], function(){ 
    
         Route::get('users', function(){ 
          return view('admin/users'); 
         }); 
    
        }); 
    
    }); 
    

    SentinelCheck Ara Katman

    if (!Sentinel::check()) { // user is not authenticated 
        return redirect()->route('admin.login')->with('error', 'You must be logged to view the page'); 
    } 
    if (Sentinel::inRole('customer')) { // user is authenticated but he is a customer 
        return redirect()->route('admin.login')->with('error', 'You are a customer and cannot access to backend section'); 
    } 
    
    :

    şimdiye kadar ne yaptık (sadece gerekli kodu koymak)

    SentinelAdmin Ara Katman (Kernel.php adlı 'yönetici')

    if (!Sentinel::inRole('admin')) { // user is authenticated but he is not an admin 
        return redirect()->route('admin.login')->with('error', 'You are not admin and cannot view requested section'); 
    } 
    

    SentinelAgent Ara Katman (Kernel.php adlı 'ajan')

    if (!Sentinel::inRole('agent')) { // user is authenticated but he is not an agent 
        return redirect()->route('admin.login')->with('error', 'You are not agent and cannot view requested section'); 
    } 
    

    Şimdiye kadar iyi, dedim, ama işler pisliği ben rolleri karıştırmak çalıştığınızda; yani böyle bir rota yazamıyor:

    // only admin and agent can access this section 
    Route::group(['middleware' => ['admin', 'agent']], function(){ 
    
        Route::get('orders', function(){ 
         return view('admin/orders'); 
        }); 
    
    }); 
    

    "ajan" engellemek ve onu çıkış olacak "admin" katman beri bölümüne ulaşmak asla çünkü.

    ['middleware' => ['admin', 'writer']] 
    ['middleware' => ['agent', 'writer']] 
    ['middleware' => ['admin', 'writer', 'whatever_else_role']] 
    

    vb ..

    Yani, kolayca rolleri karıştırmak hangi bir (kolay) yolu yoktur bölümlere erişir: Ve aynı şekilde, ben her roller karışımını yapamaz? Yardım için şimdiden teşekkür ederiz.

  • cevap

    İlgili konular