Is it possible to set a global language prefix to every url:
Currently php artisan route:list --compact gives
+----------+----------------------------------+-..
| Method | URI | Action..
+----------+----------------------------------+-..
| GET|HEAD | api/user | Closur..
| GET|HEAD | forgot-password | Laravel\Fortify\Htt...
| POST | forgot-password | Lara..
| GET|HEAD | livewire/livewire.js | Livewire\..
..
| GET|HEAD | login | Lara..
| GET|HEAD | sanctum/csrf-cookie | Lar..
| POST | two-factor-challenge | L..
| POST | user/confirm-password | Lar..
| GET|HEAD | user/confirm-password | La..
..
| POST | user/two-factor-recovery-codes | Lar..
+----------+----------------------------------+-..
but i want to (if e.g english and spain language)
+----------+----------------------------------+-..
| Method | URI | Action..
+----------+----------------------------------+-..
| GET|HEAD | en/api/user | Closur..
| GET|HEAD | en/forgot-password | Laravel\Fortify\Htt...
| POST | en/forgot-password | Lara..
| GET|HEAD | en/livewire/livewire.js | Livewire\..
..
| GET|HEAD | en/login | Lara..
| GET|HEAD | en/sanctum/csrf-cookie | Lar..
| POST | en/two-factor-challenge | L..
| POST | en/user/confirm-password | Lar..
| GET|HEAD | en/user/confirm-password | La..
..
| POST | en/user/two-factor-recovery-codes | Lar..
....the same in spain:
| GET|HEAD | es/api/user | Closur..
| GET|HEAD | es/forgot-password | Laravel\Fortify\Htt...
...
That which language is active correspondingly.
In a web.php i try to
foreach (['en', 'es'] as $k) {
//echo (substr(url()->current(), strlen(url('/')) + 1, 2) == $k);
Route::prefix($k)->group(function () use ($k) {
Route::get('/', fn () => view('welcome'))->name("{$k}_home");
});
}
Route::get('/', function () {
return Redirect::route('es_home');
});
Thank you.
Route::group([ 'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}'],'middleware' => 'setlocale']);
Related
I am having problems getting some routes to work. I have clearly declared some routes that just don't show up in php artisan route:list, even after clearing the cache.
Since I think this may be related to another line not being correct, I have pasted the entire routes file here. All the admin routes are working, but some "pro" and some "shop" routes are missing completely! There are several missing, so I will not list them all. I am out of thoughts as to how this is happening.
Auth::routes();
Route::prefix('cms')->middleware(['role:admin'])->namespace('Admin')->name('cms.admin.')->group(function () {
Route::get('', 'CmsController#index')->name('index');
Route::get('instellingen', 'CmsController#getSetting')->name('setting.get');
Route::match(['put', 'patch'], 'instellingen', 'CmsController#updateSetting')->name('setting.update');
Route::resource('coaches', 'ProController')->names('pro');
Route::resource('winkels', 'ShopController')->names('shop');
Route::resource('adviezen', 'AdviceController')->names('advice');
Route::resource('notificaties', 'NotificationController')->names('notification');
});
Route::prefix('account')->name('account.')->group(function () {
Route::middleware(['role:shop'])->namespace('Shop')->name('shop.')->group(function () {
Route::get('', 'AccountController#index')->name('index');
Route::get('instellingen', 'AccountController#getSetting')->name('setting.get');
Route::match(['put', 'patch'], 'instellingen', 'AccountController#postSetting')->name('setting.post');
Route::get('profiel', 'AccountController#getProfile')->name('profile.get');
Route::match(['put', 'patch'], 'profiel', 'AccountController#postProfile')->name('profile.post');
Route::get('coaches', 'AccountController#getPro')->name('pro.get');
Route::match(['put', 'patch'], 'coaches', 'AccountController#postPro')->name('pro.post');
Route::resource('adviezen', 'AdviceController')->names('advice');
});
Route::middleware(['role:pro'])->namespace('Pro')->name('pro.')->group(function () {
Route::get('', 'AccountController#index')->name('index');
Route::get('profiel', 'AccountController#getProfile')->name('profile.get');
Route::match(['put', 'patch', 'delete'], 'profiel', 'AccountController#postProfile')->name('profile.post');
Route::get('winkel', 'AccountController#getShop')->name('shop.get');
Route::match(['post', 'delete'], 'winkel', 'AccountController#postShop')->name('shop.post');
Route::get('postvak', 'AccountController#getNotification')->name('notification.get');
Route::post('postvak', 'AccountController#postNotification')->name('notification.post');
Route::resource('adviezen', 'AdviceController')->names('advice');
});
});
Route::get('', 'SiteController#index')->name('site.index');
Result when printing the php artisan route:list -c (Yes, I know this is quite a lot of text, but I think it is necessary to see the complete picture and might help in the solving of this particular problem)
+------------------+------------------------------------+------------------------------------------------------------------------+
| Method | URI | Action |
+------------------+------------------------------------+------------------------------------------------------------------------+
| GET|HEAD | / | App\Http\Controllers\SiteController#index |
| GET|HEAD | _debugbar/assets/javascript | Barryvdh\Debugbar\Controllers\AssetController#js |
| GET|HEAD | _debugbar/assets/stylesheets | Barryvdh\Debugbar\Controllers\AssetController#css |
| DELETE | _debugbar/cache/{key}/{tags?} | Barryvdh\Debugbar\Controllers\CacheController#delete |
| GET|HEAD | _debugbar/clockwork/{id} | Barryvdh\Debugbar\Controllers\OpenHandlerController#clockwork |
| GET|HEAD | _debugbar/open | Barryvdh\Debugbar\Controllers\OpenHandlerController#handle |
| GET|HEAD | _debugbar/telescope/{id} | Barryvdh\Debugbar\Controllers\TelescopeController#show |
| GET|HEAD | account | App\Http\Controllers\Pro\AccountController#index |
| POST | account/adviezen | App\Http\Controllers\Pro\AdviceController#store |
| GET|HEAD | account/adviezen | App\Http\Controllers\Pro\AdviceController#index |
| GET|HEAD | account/adviezen/create | App\Http\Controllers\Pro\AdviceController#create |
| PUT|PATCH | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#update |
| GET|HEAD | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#show |
| DELETE | account/adviezen/{adviezen} | App\Http\Controllers\Pro\AdviceController#destroy |
| GET|HEAD | account/adviezen/{adviezen}/edit | App\Http\Controllers\Pro\AdviceController#edit |
| PUT|PATCH | account/coaches | App\Http\Controllers\Shop\AccountController#postPro |
| GET|HEAD | account/coaches | App\Http\Controllers\Shop\AccountController#getPro |
| GET|HEAD | account/instellingen | App\Http\Controllers\Shop\AccountController#getSetting |
| PUT|PATCH | account/instellingen | App\Http\Controllers\Shop\AccountController#postSetting |
| GET|HEAD | account/postvak | App\Http\Controllers\Pro\AccountController#getNotification |
| POST | account/postvak | App\Http\Controllers\Pro\AccountController#postNotification |
| PUT|PATCH|DELETE | account/profiel | App\Http\Controllers\Pro\AccountController#postProfile |
| PUT|PATCH | account/profiel | App\Http\Controllers\Shop\AccountController#postProfile |
| GET|HEAD | account/profiel | App\Http\Controllers\Pro\AccountController#getProfile |
| GET|HEAD | account/winkel | App\Http\Controllers\Pro\AccountController#getShop |
| POST|DELETE | account/winkel | App\Http\Controllers\Pro\AccountController#postShop |
| GET|HEAD | api/user | Closure |
| GET|HEAD | cms | App\Http\Controllers\Admin\CmsController#index |
| GET|HEAD | cms/adviezen | App\Http\Controllers\Admin\AdviceController#index |
| POST | cms/adviezen | App\Http\Controllers\Admin\AdviceController#store |
| GET|HEAD | cms/adviezen/create | App\Http\Controllers\Admin\AdviceController#create |
| PUT|PATCH | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#update |
| DELETE | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#destroy |
| GET|HEAD | cms/adviezen/{adviezen} | App\Http\Controllers\Admin\AdviceController#show |
| GET|HEAD | cms/adviezen/{adviezen}/edit | App\Http\Controllers\Admin\AdviceController#edit |
| GET|HEAD | cms/coaches | App\Http\Controllers\Admin\ProController#index |
| POST | cms/coaches | App\Http\Controllers\Admin\ProController#store |
| GET|HEAD | cms/coaches/create | App\Http\Controllers\Admin\ProController#create |
| GET|HEAD | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#show |
| DELETE | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#destroy |
| PUT|PATCH | cms/coaches/{coach} | App\Http\Controllers\Admin\ProController#update |
| GET|HEAD | cms/coaches/{coach}/edit | App\Http\Controllers\Admin\ProController#edit |
| PUT|PATCH | cms/instellingen | App\Http\Controllers\Admin\CmsController#updateSetting |
| GET|HEAD | cms/instellingen | App\Http\Controllers\Admin\CmsController#getSetting |
| GET|HEAD | cms/notificaties | App\Http\Controllers\Admin\NotificationController#index |
| POST | cms/notificaties | App\Http\Controllers\Admin\NotificationController#store |
| GET|HEAD | cms/notificaties/create | App\Http\Controllers\Admin\NotificationController#create |
| GET|HEAD | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#show |
| PUT|PATCH | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#update |
| DELETE | cms/notificaties/{notificaty} | App\Http\Controllers\Admin\NotificationController#destroy |
| GET|HEAD | cms/notificaties/{notificaty}/edit | App\Http\Controllers\Admin\NotificationController#edit |
| POST | cms/winkels | App\Http\Controllers\Admin\ShopController#store |
| GET|HEAD | cms/winkels | App\Http\Controllers\Admin\ShopController#index |
| GET|HEAD | cms/winkels/create | App\Http\Controllers\Admin\ShopController#create |
| GET|HEAD | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#show |
| DELETE | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#destroy |
| PUT|PATCH | cms/winkels/{winkel} | App\Http\Controllers\Admin\ShopController#update |
| GET|HEAD | cms/winkels/{winkel}/edit | App\Http\Controllers\Admin\ShopController#edit |
| GET|HEAD | login | App\Http\Controllers\Auth\LoginController#showLoginForm |
| POST | login | App\Http\Controllers\Auth\LoginController#login |
| POST | logout | App\Http\Controllers\Auth\LoginController#logout |
| POST | password/confirm | App\Http\Controllers\Auth\ConfirmPasswordController#confirm |
| GET|HEAD | password/confirm | App\Http\Controllers\Auth\ConfirmPasswordController#showConfirmForm |
| POST | password/email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail |
| GET|HEAD | password/reset | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm |
| POST | password/reset | App\Http\Controllers\Auth\ResetPasswordController#reset |
| GET|HEAD | password/reset/{token} | App\Http\Controllers\Auth\ResetPasswordController#showResetForm |
| POST | register | App\Http\Controllers\Auth\RegisterController#register |
| GET|HEAD | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm |
+------------------+------------------------------------+------------------------------------------------------------------------+
It is not a syntax error, since my IDE does not give an error, so I am thinking it might be a logical one or something I am completely missing...
Any help would be much appreciated.
Kind regards,
Niels
Although the result was pretty embarrassing;
What I did was register multiple routes with the same URI and method. Although they had different namespaces and names, it conflicted.
Fixed by prefixing the URI in the 2 separate groups
Thanks to user lagbox for the answer.
I'm currently facing an issue with the prefix routing. I'm not sure if I'm doing it right for the routing, can you help me?
Here is the context: My website has 2 front and 1 back. All views will kind of be similar, just some section will disappear.
Urls should be like this:
localhost/admin
localhost/front1
localhost/front2
When I tried to go to localhost/front1/login, I have this error
Missing required parameters for [Route: login] [URI: {brand}/login]. (View: F:\StockageUnit2\Developpement\projets\billetterie\resources\views\auth\login.blade
What am I doing wrong ?
And how do I differentiate which route I'm using on my template for the href ?
How I am supposed to redirect depending on the prefix as href is determined by the route name?
I read the documentation and found no clues about it...
app\Providers\RouteServiceProvider.php
public function boot()
{
parent::boot();
Route::bind('brand', function ($value) {
return Brand::where('slug', $value)->first() ?? abort(404);
});
}
routes/web.php
use Illuminate\Support\Facades\Auth;
use \App\Brand;
Route::get('/' , 'HomeController#index')->name('main');
/*Back*/
Route::group([
'prefix' => 'admin'
], function () {
Route::get('/' , 'AdminController#index')->name('admin.home');
AuthRoutes();
});
/*Front*/
Route::group([
'prefix' => '{brand}'
], function () {
Route::get('/' , 'BrandsLandingController#index')->name('main_landing');
AuthRoutes();
});
function AuthRoutes()
{
Route::get('login', 'Auth\LoginController#showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController#login');
Route::post('logout', 'Auth\LoginController#logout')->name('logout');
Route::get('register', 'Auth\RegisterController#showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController#register');
Route::get('password/reset', 'Auth\ForgotPasswordController#showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController#sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController#showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController#reset')->name('password.update');
Route::get('email/verify', 'Auth\VerificationController#show')->name('verification.notice');
Route::get('email/verify/{id}', 'Auth\VerificationController#verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController#resend')->name('verification.resend');
}
route:list
| | GET|HEAD | / | main | App\Http\Controllers\HomeController#index |
| | GET|HEAD | admin | admin.home | App\Http\Controllers\AdminController#index | |
| | GET|HEAD | admin/email/resend | verification.resend | App\Http\Controllers\Auth\VerificationController#resend | web,auth,throttle:
| | GET|HEAD | admin/email/verify | verification.notice | App\Http\Controllers\Auth\VerificationController#show | web,|
| | GET|HEAD | admin/email/verify/{id} | verification.verify | App\Http\Controllers\Auth\VerificationController#verify | web,auth,signed,e:6,1 |
| | GET|HEAD | admin/login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,|
| | POST | admin/login | | App\Http\Controllers\Auth\LoginController#login | web,|
| | POST | admin/logout | logout | App\Http\Controllers\Auth\LoginController#logout | |
| | POST | admin/password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,|
| | GET|HEAD | admin/password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,|
| | POST | admin/password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController#reset | web,|
| | GET|HEAD | admin/password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,|
| | GET|HEAD | admin/register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,|
| | POST | admin/register | | App\Http\Controllers\Auth\RegisterController#register | web,|
| | GET|HEAD | api/user | | Closure | api,|
| | GET|HEAD | {brand} | main_landing | App\Http\Controllers\BrandsLandingController#index | |
| | GET|HEAD | {brand}/email/resend | verification.resend | App\Http\Controllers\Auth\VerificationController#resend | web,auth,throttle:
| | GET|HEAD | {brand}/email/verify | verification.notice | App\Http\Controllers\Auth\VerificationController#show | web,auth | | GET|HEAD | {brand}/email/verify/{id} | verification.verify | App\Http\Controllers\Auth\VerificationController#verify | web,auth,signed,throttl| | GET|HEAD | {brand}/login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest | | POST | {brand}/login | | App\Http\Controllers\Auth\LoginController#login | web,guest | | POST | {brand}/logout | logout | App\Http\Controllers\Auth\LoginController#logout | web | | POST | {brand}/password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,guest | | GET|HEAD | {brand}/password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,guest | | POST | {brand}/password/reset | password.update | App\Http\Controllers\Auth\ResetPasswordController#reset | web,guest | | GET|HEAD | {brand}/password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,guest | | GET|HEAD | {brand}/register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest | | POST | {brand}/register | | App\Http\Controllers\Auth\RegisterController#register | web,guest
Having no errors on the different routes.
Can differentiate the routes name depending on the prefix like front1.login, front2.login, admin.login ...
Thanks in advance
you know, Laravel Passport have predefined routes as folllow:
php artisan route:list
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | POST | oauth/authorize | | ...\ApproveAuthorizationController#approve | web,auth |
| | GET|HEAD | oauth/authorize | | ...\AuthorizationController#authorize | web,auth |
| | DELETE | oauth/authorize | | ...\DenyAuthorizationController#deny | web,auth |
| | GET|HEAD | oauth/clients | | ...\ClientController#forUser | web,auth |
| | POST | oauth/clients | | ...\ClientController#store | web,auth |
| | PUT | oauth/clients/{client_id} | | ...\ClientController#update | web,auth |
| | DELETE | oauth/clients/{client_id} | | ...\ClientController#destroy | web,auth |
| | GET|HEAD | oauth/personal-access-tokens | | ...\PersonalAccessTokenController#forUser | web,auth |
| | POST | oauth/personal-access-tokens | | ...\PersonalAccessTokenController#store | web,auth |
| | DELETE | oauth/personal-access-tokens/{token_id} | | ...\PersonalAccessTokenController#destroy | web,auth |
| | GET|HEAD | oauth/scopes | | ...\ScopeController#all | web,auth |
| | POST | oauth/token | | ...\AccessTokenController#issueToken | throttle |
| | POST | oauth/token/refresh | | ...\TransientTokenController#refresh | web,auth |
| | GET|HEAD | oauth/tokens | | ...\AuthorizedAccessTokenController#forUser | web,auth |
| | DELETE | oauth/tokens/{token_id} | | ...\AuthorizedAccessTokenController#destroy | web,auth |
+--------+----------+-----------------------------------------+------+---------------------------------------------+--------------+
Is it possible to modify that route?
e.g. oauth/authorize become api/v1/oauth/authorize
if yes, how?
I've been searching for answer quite sometime...
Yes, it is. You can declare your own routes in Passport::routes() method.
Include this inside the boot() method of your app/Providers/AuthServiceProvider file.
app/Providers/AuthServiceProvider.php
public function boot()
{
Passport::routes(null, ['prefix' => 'api/v1/oauth']);
}
It seems like the routes method has been removed (Passport 11.x).
In order to do this now, you would need to publish the Passport configuration file and set the path attribute to the desired value: api/v1/oauth.
php artisan vendor:publish --tag=passport-config
// config/passport.php
<?php
return [
...
'path' => 'api/v1/oauth',
];
I haven't been able to find this information in the documentation. I figured this out by looking at the source code. Here's the link for further reference.
I'm trying to submit data to my Laravel Controller using Ajax, but I'm getting the error "422 (Unprocessable Entity)".
I've done some Googling, and I think it is to do with the JSON being passed, but I'm unsure how to solve it.
The following is what I believe to be the relevant info:
Script
$("#addStepNew").click(function() {
var step_ingredients = JSON.stringify(stepIngredients)
var step_description = $('#stepDescription').val();
var prep_step = $('input[name=prepStep]:checked').val();
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: "post",
data: "ingredients="+step_ingredients+"&description="+step_description+"&is_prep="+prep_step+"step_no=1",
dataType:'json',
url: "{{ route('ingredients.store', ['id' => $recipe->id]) }}",
success:function(data){
console.log(data);
$("#output").html('<div class="alert alert-success my-0">'+data.name+' added</div>');
$("#output").toggleClass("invisible")
$("#output").fadeOut(2000);
}
});
});
The console.log(stepIngredients) gives [{"ingredient_id":"9","ingredient_quantity":"3","Ingredient_units":"kilograms"}]
The idea is to pass it all through to my controller, and write the values to the DB, but at the minute I can't even pass the info.
I've done the following to my controller:
public function store(Request $request)
{
//$this->validate($request);
/*
$step = new Step;
$step->recipe_id = $request->recipe_id;
$step->step_no = $request->step_no;
$step->method = $request->description;
$step->save();
*/
$data = [
'success' => true,
'message'=> 'Your AJAX processed correctly',
] ;
return response()->json($data);
}
So as I understand it (I'm teaching myself this as I go along), if the AJAX is passed successfully, then it should return the success message and output it in my #output div?
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\PagesController#index | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | home | App\Http\Controllers\HomeController#index | web,auth |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController#showLoginForm | web,guest |
| | POST | login | | App\Http\Controllers\Auth\LoginController#login | web,guest |
| | POST | logout | logout | App\Http\Controllers\Auth\LoginController#logout | web |
| | POST | password/email | password.email | App\Http\Controllers\Auth\ForgotPasswordController#sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | password.request | App\Http\Controllers\Auth\ForgotPasswordController#showLinkRequestForm | web,guest |
| | POST | password/reset | | App\Http\Controllers\Auth\ResetPasswordController#reset | web,guest |
| | GET|HEAD | password/reset/{token} | password.reset | App\Http\Controllers\Auth\ResetPasswordController#showResetForm | web,guest |
| | GET|HEAD | recipes | recipes.index | App\Http\Controllers\RecipesController#index | web,auth |
| | POST | recipes | recipes.store | App\Http\Controllers\RecipesController#store | web,auth |
| | GET|HEAD | recipes/create | recipes.create | App\Http\Controllers\RecipesController#create | web,auth |
| | GET|HEAD | recipes/{id}/ingredients | ingredients.create | App\Http\Controllers\IngredientsController#create | web,auth |
| | POST | recipes/{id}/ingredients | ingredients.store | App\Http\Controllers\IngredientsController#store | web,auth |
| | GET|HEAD | recipes/{id}/steps | steps.create | App\Http\Controllers\StepsController#create | web,auth |
| | POST | recipes/{id}/steps | steps.store | App\Http\Controllers\StepsController#store | web,auth |
| | PUT|PATCH | recipes/{recipe} | recipes.update | App\Http\Controllers\RecipesController#update | web,auth |
| | DELETE | recipes/{recipe} | recipes.destroy | App\Http\Controllers\RecipesController#destroy | web,auth |
| | GET|HEAD | recipes/{recipe} | recipes.show | App\Http\Controllers\RecipesController#show | web,auth |
| | GET|HEAD | recipes/{recipe}/edit | recipes.edit | App\Http\Controllers\RecipesController#edit | web,auth |
| | POST | register | | App\Http\Controllers\Auth\RegisterController#register | web,guest |
| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController#showRegistrationForm | web,guest |
| | GET|HEAD | tags | tags.index | App\Http\Controllers\TagsController#index | web,auth |
| | POST | tags | tags.store | App\Http\Controllers\TagsController#store | web,auth |
| | GET|HEAD | tags/create | tags.create | App\Http\Controllers\TagsController#create | web,auth |
| | GET|HEAD | tags/{tag} | tags.show | App\Http\Controllers\TagsController#show | web,auth |
| | PUT|PATCH | tags/{tag} | tags.update | App\Http\Controllers\TagsController#update | web,auth |
| | DELETE | tags/{tag} | tags.destroy | App\Http\Controllers\TagsController#destroy | web,auth |
| | GET|HEAD | tags/{tag}/edit | tags.edit | App\Http\Controllers\TagsController#edit | web,auth |
+--------+-----------+--------------------------+--------------------+------------------------------------------------------------------------+--------------+
I have Laravel 5.6 installed.
I would like to give Demo account to a user, which cannot INSERT or UPDATE anything but view everything.
I don't have a group of roles in my system. I just want to hardcode the user id in somewhere and restrict these actions.
I googled and found a lot of different approaches ( https://laracasts.com/discuss/channels/laravel/protecting-route-for-specific-user ) , which is far more than what I need. I just simply want to restrict this functions to specific users in all website.
Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------------------------------------------+---------------------------------+------------------------------------------------------------------------------------+--------------------------------------------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | _debugbar/assets/javascript | debugbar.assets.js | Barryvdh\Debugbar\Controllers\AssetController#js | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/assets/stylesheets | debugbar.assets.css | Barryvdh\Debugbar\Controllers\AssetController#css | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | DELETE | _debugbar/cache/{key}/{tags?} | debugbar.cache.delete | Barryvdh\Debugbar\Controllers\CacheController#delete | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/clockwork/{id} | debugbar.clockwork | Barryvdh\Debugbar\Controllers\OpenHandlerController#clockwork | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | _debugbar/open | debugbar.openhandler | Barryvdh\Debugbar\Controllers\OpenHandlerController#handle | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | giris | | Closure | web |
| | GET|HEAD | horizon/api/jobs/failed | horizon.failed-jobs.index | Laravel\Horizon\Http\Controllers\FailedJobsController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/jobs/failed/{id} | horizon.failed-jobs.show | Laravel\Horizon\Http\Controllers\FailedJobsController#show | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/jobs/recent | horizon.recent-jobs.index | Laravel\Horizon\Http\Controllers\RecentJobsController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | POST | horizon/api/jobs/retry/{id} | horizon.retry-jobs.show | Laravel\Horizon\Http\Controllers\RetryController#store | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/masters | horizon.masters.index | Laravel\Horizon\Http\Controllers\MasterSupervisorController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/metrics/jobs | horizon.jobs-metrics.index | Laravel\Horizon\Http\Controllers\JobMetricsController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/metrics/jobs/{id} | horizon.jobs-metrics.show | Laravel\Horizon\Http\Controllers\JobMetricsController#show | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/metrics/queues | horizon.queues-metrics.index | Laravel\Horizon\Http\Controllers\QueueMetricsController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/metrics/queues/{id} | horizon.queues-metrics.show | Laravel\Horizon\Http\Controllers\QueueMetricsController#show | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | POST | horizon/api/monitoring | horizon.monitoring.store | Laravel\Horizon\Http\Controllers\MonitoringController#store | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/monitoring | horizon.monitoring.index | Laravel\Horizon\Http\Controllers\MonitoringController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/monitoring/{tag} | horizon.monitoring-tag.paginate | Laravel\Horizon\Http\Controllers\MonitoringController#paginate | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | DELETE | horizon/api/monitoring/{tag} | horizon.monitoring-tag.destroy | Laravel\Horizon\Http\Controllers\MonitoringController#destroy | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/stats | horizon.stats.index | Laravel\Horizon\Http\Controllers\DashboardStatsController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/api/workload | horizon.workload.index | Laravel\Horizon\Http\Controllers\WorkloadController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
| | GET|HEAD | horizon/{view?} | horizon.index | Laravel\Horizon\Http\Controllers\HomeController#index | web,Laravel\Horizon\Http\Middleware\Authenticate |
Quickest way will be to create a simple middleware where you abort if it's that specific user.
To create the middleware you can use the artisan command make:middleware
php artisan make:middleware LimitUserIdX
In the newly created file (app/Http/Middleware/LimitUserIdX.php) you can just check if the authentify user id is X and if so, abort with error code 403 (permission denied), like this:
public function handle($request, Closure $next)
{
$userId = Auth::id();
if($userId == 5) {
abort(403);
}
return $next($request);
}
change the 5 to the user you want to limit.
Edit: I've missed understood the question, this is a correction.
You should add the newly created middleware to Laravel global middlewares list. Just go to App/Http/Kernel.php and add the class to the $middleware var. This will make Laravel run your middleware on all HTTP requests to your application (without the need to add it to each and every route definition).
Then, you will also want to edit the middleware itself to check for the requested method before aborting, like this:
public function handle($request, Closure $next)
{
$userId = Auth::id();
if(request()->method() != "GET" && request()->method() != "HEAD" && $userId == 5) {
abort(403);
}
return $next($request);
}