thepranavpatel's avatar

Spatie gave an error like "User have not permission for this page access."

I am using laravel's spatie/permission package on Laravel 5.8 in admin panel.I have setup all links and table perfect but somehow I got an error like "User have not permission for this page access."

0 likes
7 replies
MichalOravec's avatar

It's not an error, your current user don't have permission for that url. So give him an exactly permission for that.

thepranavpatel's avatar

yeah , you are right but I have "admin" as main role and I gave all permission to that role in my table .I think there must be some middlewere issue but I could not get it.

thepranavpatel's avatar

My routes

Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => ['admin.auth']], function () {

	Route::get('dashboard', 'DashboardController@index')->name('admin.dashboard');
	Route::resource('cmspage', 'CmsPageController');
	Route::resource('users', 'UserController');
	Route::resource('roles', 'RoleController');
	Route::resource('products', 'ProductController');

});

my controller

<?php

namespace App\Http\Controllers;
namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use DB;


class RoleController extends Controller
{
	/**
	 * Display a listing of the resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	function __construct()
	{
		$this->middleware('permission:role-list|role-create|role-edit|role-delete', ['only' => ['index','store']]);
		$this->middleware('permission:role-create', ['only' => ['create','store']]);
		$this->middleware('permission:role-edit', ['only' => ['edit','update']]);
		$this->middleware('permission:role-delete', ['only' => ['destroy']]);  
	}


	/**
	 * Display a listing of the resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function index(Request $request)
	{
		$roles = Role::orderBy('id','DESC')->paginate(5);
		return view('admin.roles.index',compact('roles'))
			->with('i', ($request->input('page', 1) - 1) * 5);
	}


	/**
	 * Show the form for creating a new resource.
	 *
	 * @return \Illuminate\Http\Response
	 */
	public function create()
	{
		$permission = Permission::get();
		return view('roles.create',compact('permission'));
	}


	/**
	 * Store a newly created resource in storage.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @return \Illuminate\Http\Response
	 */
	public function store(Request $request)
	{
		$this->validate($request, [
			'name' => 'required|unique:roles,name',
			'permission' => 'required',
		]);


		$role = Role::create(['name' => $request->input('name')]);
		$role->syncPermissions($request->input('permission'));


		return redirect()->route('roles.index')
						->with('success','Role created successfully');
	}
	/**
	 * Display the specified resource.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function show($id)
	{
		$role = Role::find($id);
		$rolePermissions = Permission::join("role_has_permissions","role_has_permissions.permission_id","=","permissions.id")
			->where("role_has_permissions.role_id",$id)
			->get();


		return view('admin.roles.show',compact('role','rolePermissions'));
	}


	/**
	 * Show the form for editing the specified resource.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function edit($id)
	{
		$role = Role::find($id);
		$permission = Permission::get();
		$rolePermissions = DB::table("role_has_permissions")->where("role_has_permissions.role_id",$id)
			->pluck('role_has_permissions.permission_id','role_has_permissions.permission_id')
			->all();


		return view('roles.edit',compact('role','permission','rolePermissions'));
	}


	/**
	 * Update the specified resource in storage.
	 *
	 * @param  \Illuminate\Http\Request  $request
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function update(Request $request, $id)
	{
		$this->validate($request, [
			'name' => 'required',
			'permission' => 'required',
		]);


		$role = Role::find($id);
		$role->name = $request->input('name');
		$role->save();


		$role->syncPermissions($request->input('permission'));


		return redirect()->route('roles.index')
						->with('success','Role updated successfully');
	}
	/**
	 * Remove the specified resource from storage.
	 *
	 * @param  int  $id
	 * @return \Illuminate\Http\Response
	 */
	public function destroy($id)
	{
		DB::table("roles")->where('id',$id)->delete();
		return redirect()->route('roles.index')
						->with('success','Role deleted successfully');
	}
}

My auth.php

<?php

return [

	/*
	|--------------------------------------------------------------------------
	| Authentication Defaults
	|--------------------------------------------------------------------------
	|
	| This option controls the default authentication "guard" and password
	| reset options for your application. You may change these defaults
	| as required, but they're a perfect start for most applications.
	|
	*/

	'defaults' => [
		'guard' => 'customer',
		'passwords' => 'users',
	],

	/*
	|--------------------------------------------------------------------------
	| Authentication Guards
	|--------------------------------------------------------------------------
	|
	| Next, you may define every authentication guard for your application.
	| Of course, a great default configuration has been defined for you
	| here which uses session storage and the Eloquent user provider.
	|
	| All authentication drivers have a user provider. This defines how the
	| users are actually retrieved out of your database or other storage
	| mechanisms used by this application to persist your user's data.
	|
	| Supported: "session", "token"
	|
	*/

	'guards' => [
		'admin' => [
			'driver' => 'session',
			'provider' => 'admin',
		],

		'api' => [
			'driver' => 'token',
			'provider' => 'api',
			'hash' => false,
		],
		'customer' => [
			'driver' => 'session',
			'provider' => 'customer',
		]
	],

	/*
	|--------------------------------------------------------------------------
	| User Providers
	|--------------------------------------------------------------------------
	|
	| All authentication drivers have a user provider. This defines how the
	| users are actually retrieved out of your database or other storage
	| mechanisms used by this application to persist your user's data.
	|
	| If you have multiple user tables or models you may configure multiple
	| sources which represent each model / table. These sources may then
	| be assigned to any extra authentication guards you have defined.
	|
	| Supported: "database", "eloquent"
	|
	*/

  'providers' => [
		'admin' => [
			'driver' => 'eloquent',
			'model' => App\User::class,
		],
		'customer' => [
			'driver' => 'eloquent',
			'model' => App\Customer::class,
		]
		// 'users' => [
		//     'driver' => 'database',
		//     'table' => 'users',
		// ],
	],

	/*
	|--------------------------------------------------------------------------
	| Resetting Passwords
	|--------------------------------------------------------------------------
	|
	| You may specify multiple password reset configurations if you have more
	| than one user table or model in the application and you want to have
	| separate password reset settings based on the specific user types.
	|
	| The expire time is the number of minutes that the reset token should be
	| considered valid. This security feature keeps tokens short-lived so
	| they have less time to be guessed. You may change this as needed.
	|
	*/

  'passwords' => [
		'admin' => [
			'provider' => 'admin',
			'table' => 'password_resets',
			'expire' => 60,
		],

	],

];

Please or to participate in this conversation.