2015-03-14 10 views
5

मैं लार्वेल में नया हूं। मैं लार्वेल 5 ज़िज़ाको/सौंपा (लार्वेल -5 शाखा से) में उपयोग करने की कोशिश कर रहा हूं। सभी ठीक काम कर रहे हैं - नियम संलग्न करें, नियमों को अलग करें ... लेकिन जब मैं चेक अनुमतियों को आजमाता हूं तो मुझे समस्याएं होती हैं।लैरवेल 5, प्रवेश - चेक रोल काम नहीं कर रहे

सबसे पहले मैं path.php में कोशिश करता हूं, लेकिन इस जगह में प्रवेश नहीं जानता कि मैं कौन हूं, hasRole और routeNeedsRole routes.php में काम नहीं कर रहा है।

मिडलवेयर hasRole काम कर रहा है लेकिन routeNeedsRole नहीं है। दूसरी पैरामीटर स्ट्रिंग, सरणी, समान प्रभाव के रूप में उपयोग करने का प्रयास - abort(403) रन।

क्योंकि hasRole काम कर रहा है यह समस्या मेरे लिए बहुत अजीब लगती है।

composer dump-autoload - इस्तेमाल किया, समस्या का समाधान नहीं

routes.php

Entrust::hasRole('superadmin');// => false 
\Entrust::routeNeedsRole('admin/dashboard', ['superadmin'], abort(403, 'Forbidden'), false); // display 403 page 

में मिडलवेयर में

\Entrust::hasRole('superadmin'); // => true 
\Entrust::routeNeedsRole('admin/dashboard', ['superadmin'], abort(403, 'Forbidden'), false); // display 403 page 

मेरे मॉडल User.php

01,235,
use Zizaco\Entrust\Traits\EntrustUserTrait; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

use Authenticatable, CanResetPassword, EntrustUserTrait; 

routes.php

Route::group([ 'prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['auth', 'admin']], function(){ 
    Route::get('dashboard', [ 'as' => 'dashboard', 'uses' => "[email protected]" ]); 
}); 

मैं भी भूमिका और अनुमति मॉडल लग रहा है रीडमी में दाखिल https://github.com/Zizaco/entrust/tree/laravel-5

// खेद मेरी अंग्रेजी के लिए की तरह।

उत्तर

0

अपने नियंत्रकों में यह प्रयास करें:

प्रमाणीकरण :: उपयोगकर्ता() -> hasRole ('सुपरएडमिन');

+0

उत्तर के लिए धन्यवाद, लेकिन मुझे इसके लिए प्रवेश का उपयोग करने की आवश्यकता है। –

+0

प्रवेश दस्तावेज के अनुसार यह 'प्रवेश :: हैरोल (' सुपरडमिन ') का उपयोग करने के समान है; ' – Fuseblown

11

अद्यतन: लैरवेल 5.1.11 और नया अब Authorization में बनाया गया है। यह अधिक लारवेल अनुकूल है और हमेशा अच्छी तरह से बनाए रखा जाएगा। उपयोग इस जब संभव


आप मिडलवेयर गलत प्रयोग कर रहे हैं। प्रवेश के लिए दस्तावेज़ों में अभी भी बहुत सारे लैरवेल 4 सामान हैं, इसलिए आप वहां से जो भी उपयोग करते हैं उसके लिए आपको चुनिंदा होना चाहिए। मिडलवेयर routeNeedsRole सेट नहीं किया जाना चाहिए। असल में routeNeedsRole मेरी राय में वास्तव में एल 5 में फिट नहीं है। यहाँ कैसे मैं यह कर देगी:

अब

php artisan make:middleware AuthAdmin 

के साथ एक नया मिडलवेयर बनाएं नई जनरेट अनुप्रयोग में/HTTP/मिडिलवेयर/AuthAdmin.php

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 

class AuthAdmin { 

    protected $auth; 

    public function __construct(Guard $auth) { 
    $this->auth = $auth; 
    } 

    public function handle($request, Closure $next) { 
    if ($this->auth->guest()) { 
     if ($request->ajax()) { 
     return response('Unauthorized.', 401); 
     } else { 
     return redirect()->guest('auth/login'); 
     } 
    } else if(! $request->user()->hasRole('superadmin')) { 
     return abort(404); //Or redirect() or whatever you want 
    } 
    return $next($request); 
    } 

} 

यह भी ऐसा ही होगा ऑथ मिडलवेयर के रूप में चीज लेकिन अगर वे पहले से लॉग इन हैं और 'सुपरडमिन' भूमिका नहीं है तो उन्हें 404 मिलेंगे।

अगला हमें रूटमेडवेयर पर मिडलवेयर जोड़ने की आवश्यकता है। app/Http/Kernal.php में यह करें:

protected $routeMiddleware = [ 
    ..., 
    'superadmin' => 'App\Http\Middleware\AuthAdmin', 
]; 

यह नियंत्रक से मिडलवेयर जोड़ने के लिए संभव बनाता है। अब चलो करते हैं। आपके नियंत्रक में हम इसे कन्स्ट्रक्टर में करते हैं:

public function __construct() { 
    $this->middleware('superadmin'); 
} 

यह पूरे नियंत्रक को मिडलवेयर जोड़ देगा। यदि आवश्यक हो तो आप मार्गों के रूप में विशिष्ट हो सकते हैं लेकिन आपके मामले के लिए मुझे लगता है कि हमें पूरे नियंत्रक की आवश्यकता है।

मुझे बताएं कि आपको और अधिक मदद की आवश्यकता है या नहीं।

नोट: यह AuthAdmin 'प्रमाणन' मिडलवेयर चलाने कोड को कॉपी करने की बजाय पहले बनाने के लिए आदर्श होगा, लेकिन मैं कैसे कि मिडलवेयर के भीतर से और हम करने के लिए नहीं करना चाहते करने के लिए पता नहीं है 'superadmin' के बजाय middleware => ['auth', 'superadmin'] करें। अगर हमने 'auth' कोड की प्रतिलिपि नहीं बनाई है तो हम ->hasRole() को शून्य के प्राप्त करने का प्रयास करेंगे जो एक त्रुटि प्राप्त करेगा।

+2

अच्छा, विस्तृत उत्तर और यह मेरे लिए बहुत अच्छा काम करता है। इसे ओपी द्वारा चुने गए उत्तर के रूप में चिह्नित किया जाना चाहिए। – Fuseblown

संबंधित मुद्दे