Allow Aimeos Admin route to load
Forum rules
Always add your Laravel, Aimeos and PHP version as well as your environment (Linux/Mac/Win)
Spam and unrelated posts will be removed immediately!
Always add your Laravel, Aimeos and PHP version as well as your environment (Linux/Mac/Win)
Spam and unrelated posts will be removed immediately!
Allow Aimeos Admin route to load
I now have a new admin route in `config/shop.php`:
and that route works as I can see listing all routes and filtering by store. Also adding some more with the same prefix:
But somehow in dashboard I am sent to login, guess via auth middleware and then to general dashboard index view:
For dashboard in web.php I have
I think
may be overriding the Aimeos route for
Just need to think how I can get this Aimeos route to work without redirect. Seeing anything?
Code: Select all
'admin' => ['prefix' => 'store-admin', 'middleware' => ['web']]
Code: Select all
php artisan route:list --path=store
....
GET|HEAD store-admin ........................................................................................ aimeos_shop_admin › Aimeos\Shop › AdminController@indexAction
POST store-admin/{site}/jqadm/batch/{resource} .................................................... aimeos_shop_jqadm_batch › Aimeos\Shop › JqadmController@batchAction
GET|POST|HEAD store-admin/{site}/jqadm/copy/{resource}/{id} .............................................. aimeos_shop_jqadm_copy › Aimeos\Shop › JqadmController@copyAction
GET|POST|HEAD store-admin/{site}/jqadm/create/{resource} ............................................. aimeos_shop_jqadm_create › Aimeos\Shop › JqadmController@createAction
POST store-admin/{site}/jqadm/delete/{resource}/{id?} ........................................... aimeos_shop_jqadm_delete › Aimeos\Shop › JqadmController@deleteAction
GET|POST|HEAD store-admin/{site}/jqadm/export/{resource} ............................................. aimeos_shop_jqadm_export › Aimeos\Shop › JqadmController@exportAction
...
Code: Select all
Redirect Response
302
Access-Control-Allow-Origin: *
Cache-Control: no-cache, private
Date: Fri, 31 May 2024 04:10:59 GMT
Location: https://site.test/dashboard
Code: Select all
Route::domain(config('name.app_domain'))->group(function () {
...
/*
|--------------------------------------------------------------------------
| Dashboard Routes
|--------------------------------------------------------------------------
*/
Route::prefix('dashboard')->middleware('auth')->group(function () {
....
Route::get('/', [Dashboard\DashboardController::class, 'index'])->name('dashboard');
...
});
...
// To allow loading of pages directly, not just via index or homepage
Route::get('{any?}', [HomesController::class, 'index']);
});
Code: Select all
Route::get('{any?}', [HomesController::class, 'index']);
Code: Select all
'admin' => ['prefix' => 'store-admin', 'middleware' => ['web']],
Re: Allow Aimeos Admin route to load
I think the issue is the catch all. And that gets me back to earlier post wondering if I cannot just move the shop routes to web.php where I can add them all to the Dashboard routes with auth middleware check. Probably can and am trying but routes like
still fails with
Code: Select all
// Aimeos Routes
Route::prefix('store-admin')->middleware('web')->group(function () {
Route::get('admin', [\Aimeos\Shop\Controller\AdminController::class, 'indexAction']);
});
Code: Select all
URL: https://site.test/store-admin
URL: https://site.test/login?locale=en
URL: https://site.test/dashboard
Status: 200
Re: Allow Aimeos Admin route to load
I think the main issue is that the roles the user I am logged into the Laravel application do not work on Aimeos shop yet. Aimeos users are in another database and to Aimeos I am not logged in yet so that is why I get sent to login on trying the load the main shop. So I need to have at least an existing role like superadmin in application sync with Aimeos user role for it so that I am automatically logged into main store if I am logged in main application as superadmin. I also need to have the user and role created in Aimeos on logging in if it is not there.
I probably need a middleware to synchronize the user's roles from the main database with the Aimeos shop roles on login. This middleware will ensure that whenever a user logs in, their roles are updated in the Aimeos system. But I also would need to add the user if it is missing I think.
That makes me wonder. Should I have chosen a separate database or should I use just the main one? And two, does Aimeos just update the users table in Laravel and add roles or do the migrations overwrite all?
I probably need a middleware to synchronize the user's roles from the main database with the Aimeos shop roles on login. This middleware will ensure that whenever a user logs in, their roles are updated in the Aimeos system. But I also would need to add the user if it is missing I think.
That makes me wonder. Should I have chosen a separate database or should I use just the main one? And two, does Aimeos just update the users table in Laravel and add roles or do the migrations overwrite all?
Re: Allow Aimeos Admin route to load
If you configure a separate database for Aimeos tables, you must configure the "db-customer" connection in the ./config/shop.php to use the main database. The keys in section "db" and "db-customer" are the same, just the database and the credentials need to be for the appropriate database:
https://github.com/aimeos/aimeos-larave ... hp#L51-L66
Example:
Code: Select all
'db' => [
'adapter' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.driver', 'mysql' ),
'host' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.host', '127.0.0.1' ),
'port' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.port', '3306' ),
'socket' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.unix_socket', '' ),
'database' => env('DB_AIMEOS_DATABASE', 'aimeos_db'),
'username' => env('DB_AIMEOS_USERNAME', 'aimeos'),
'password' => env('DB_AIMEOS_PASSWORD', ''),
'stmt' => config( 'database.default', 'mysql' ) === 'mysql' ? ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"] : [],
'limit' => 3, // maximum number of concurrent database connections
'defaultTableOptions' => [
'charset' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.charset' ),
'collate' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.collation' ),
],
'driverOptions' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.options' ),
],
'db-customer' => [
'adapter' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.driver', 'mysql' ),
'host' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.host', '127.0.0.1' ),
'port' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.port', '3306' ),
'socket' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.unix_socket', '' ),
'database' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.database', 'forge' ),
'username' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.username', 'forge' ),
'password' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.password', '' ),
'stmt' => config( 'database.default', 'mysql' ) === 'mysql' ? ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"] : [],
'limit' => 3, // maximum number of concurrent database connections
'defaultTableOptions' => [
'charset' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.charset' ),
'collate' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.collation' ),
],
'driverOptions' => config( 'database.connections.' . config( 'database.default', 'mysql' ) . '.options' ),
],
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, give us a star
If you like Aimeos, give us a star
Re: Allow Aimeos Admin route to load
I did not adjust db-customer in shop configuration . I have
Now. And that config/shop.php does not have settings for db-customer. Should I add or is my older Laravel 9 compatible version not going to work with it?
Reading https://aimeos.org/docs/2024.x/infrastr ... -databases some more..
Code: Select all
<?php
return [
'apc_enabled' => false, // enable for maximum performance if APCu is available
'apc_prefix' => 'laravel:', // prefix for caching config and translation in APCu
'num_formatter' => 'Locale', // locale based number formatter (alternative: "Standard")
'pcntl_max' => 4, // maximum number of parallel command line processes when starting jobs
'version' => env('APP_VERSION', 1), // shop CSS/JS file version
'roles' => ['admin', 'editor, smart-administrator'.'administrator'], // user groups allowed to access the admin backend
'panel' => 'dashboard', // panel shown in admin backend after login
'routes' => [
// Docs: https://aimeos.org/docs/latest/laravel/extend/#custom-routes
// Multi-sites: https://aimeos.org/docs/latest/laravel/customize/#multiple-shops
// 'admin' => ['prefix' => 'admin', 'middleware' => ['web']],
'admin' => ['prefix' => 'store-admin', 'middleware' => ['auth', 'web']],
// 'jqadm' => ['prefix' => 'admin/{site}/jqadm', 'middleware' => ['web', 'auth']],
'jqadm' => ['prefix' => 'store-admin/{site}/jqadm', 'middleware' => ['web', 'auth']],
// 'graphql' => ['prefix' => 'admin/{site}/graphql', 'middleware' => ['web', 'auth']],
'graphql' => false,
// 'jsonadm' => ['prefix' => 'admin/{site}/jsonadm', 'middleware' => ['web', 'auth']],
// 'jsonapi' => ['prefix' => 'jsonapi', 'middleware' => ['web', 'api']],
'jsonadm' => ['prefix' => 'store-admin/{site}/jsonadm', 'middleware' => ['web', 'auth']],
'jsonapi' => ['prefix' => 'store-jsonapi', 'middleware' => ['web', 'api']],
// 'account' => ['prefix' => 'profile', 'middleware' => ['web', 'auth']],
// 'default' => ['prefix' => 'shop', 'middleware' => ['web']],
'default' => false,
// 'confirm' => ['prefix' => 'shop', 'middleware' => ['web']],
'confirm' => false,
// 'supplier' => ['prefix' => 's', 'middleware' => ['web']],
// 'page' => ['prefix' => 'p', 'middleware' => ['web']],
// 'home' => ['middleware' => ['web']],
'home' => false,
// 'update' => [],
],
'page' => [
'account-index' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'account/profile', 'account/review', 'account/subscription', 'account/basket', 'account/history', 'account/favorite', 'account/watch', 'catalog/session'],
'basket-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'basket/standard', 'basket/bulk', 'basket/related'],
'catalog-count' => ['catalog/count'],
'catalog-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/stage', 'catalog/detail', 'catalog/session'],
'catalog-home' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/home'],
'catalog-list' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
'catalog-session' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/session'],
'catalog-stock' => ['catalog/stock'],
'catalog-suggest' => ['catalog/suggest'],
'catalog-tree' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
'checkout-confirm' => ['catalog/tree', 'catalog/search', 'checkout/confirm'],
'checkout-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'checkout/standard'],
'checkout-update' => ['checkout/update'],
'supplier-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'supplier/detail', 'catalog/lists'],
'cms' => ['cms/page', 'catalog/tree', 'basket/mini'],
],
'resource' => [
'db' => [
'adapter' => config('database.connections.'.config('database.default', 'mysql').'.driver', 'mysql'),
'host' => env('DB_AIMEOS_HOST', 'localhost'),
'port' => env('DB_AIMEOS_PORT', '3306'),
'socket' => config('database.connections.'.config('database.default', 'mysql').'.unix_socket', ''),
'database' => env('DB_AIMEOS_DATABASE', 'aimeos'),
'username' => env('DB_AIMEOS_USERNAME', 'forge'),
'password' => env('DB_AIMEOS_PASSWORD', ''),
'stmt' => config('database.default', 'mysql') === 'mysql' ? ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"] : [],
'limit' => 3, // maximum number of concurrent database connections
'defaultTableOptions' => [
'charset' => config('database.connections.'.config('database.default', 'mysql').'.charset'),
'collate' => config('database.connections.'.config('database.default', 'mysql').'.collation'),
],
'driverOptions' => config('database.connections.'.config('database.default', 'mysql').'.options'),
],
'fs' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path(),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/'),
],
'fs-media' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('aimeos'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/aimeos',
],
'fs-mimeicon' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('vendor/shop/mimeicons'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/vendor/shop/mimeicons',
],
'fs-theme' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('vendor/shop/themes'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/vendor/shop/themes',
],
'fs-admin' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('admin'),
],
'fs-export' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('export'),
],
'fs-import' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('import'),
],
'fs-secure' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('secure'),
],
'mq' => [
'adapter' => 'Standard',
'db' => 'db',
],
'email' => [
'from-email' => config('mail.from.address'),
'from-name' => config('mail.from.name'),
],
],
'admin' => [],
'client' => [
'html' => [
'basket' => [
'cache' => [
// 'enable' => false, // Disable basket content caching for development
],
],
'common' => [
'cache' => [
// 'force' => true // enforce caching for logged in users
],
],
'catalog' => [
'lists' => [
'basket-add' => true, // shows add to basket in list views
// 'infinite-scroll' => true, // load more products in list view
// 'size' => 48, // number of products per page
],
'selection' => [
'type' => [ // how variant attributes are displayed
'color' => 'radio',
'length' => 'radio',
'width' => 'radio',
],
],
],
],
],
'controller' => [
'frontend' => [
'catalog' => [
'levels-always' => 3, // number of category levels for mega menu
],
],
],
'i18n' => [],
'madmin' => [
'cache' => [
'manager' => [
// 'name' => 'None', // Disable caching for development
],
],
'log' => [
'manager' => [
// 'loglevel' => 7, // Enable debug logging into madmin_log table
],
],
],
'mshop' => [
'locale' => [
// 'site' => '<custom site code>', // used instead of "default"
],
],
'command' => [],
'frontend' => [],
'backend' => [],
];
Reading https://aimeos.org/docs/2024.x/infrastr ... -databases some more..
Re: Allow Aimeos Admin route to load
Multiple database for different data domains are supported since the beginning of Aimeos.
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, give us a star
If you like Aimeos, give us a star
Re: Allow Aimeos Admin route to load
I see. Thanks for the replies so far. Learning a lot. Now I have this for `config/shop.php`:
Still getting redirected to /dashboard via /login
so auth middleware might still be interfering. Did add db-customer data and added settings for main database for that one.
For first call debugger shows this gate error:
and for query
with main being main database. Seems main application database is hit but I guess I need to add role or ability admin to user..?
Also, what is meant by data domain exactly?
Code: Select all
<?php
return [
'apc_enabled' => false, // enable for maximum performance if APCu is available
'apc_prefix' => 'laravel:', // prefix for caching config and translation in APCu
'num_formatter' => 'Locale', // locale based number formatter (alternative: "Standard")
'pcntl_max' => 4, // maximum number of parallel command line processes when starting jobs
'version' => env('APP_VERSION', 1), // shop CSS/JS file version
'roles' => ['admin', 'editor, smart-administrator'.'administrator'], // user groups allowed to access the admin backend
'panel' => 'dashboard', // panel shown in admin backend after login
'routes' => [
// Docs: https://aimeos.org/docs/latest/laravel/extend/#custom-routes
// Multi-sites: https://aimeos.org/docs/latest/laravel/customize/#multiple-shops
// 'admin' => ['prefix' => 'admin', 'middleware' => ['web']],
'admin' => ['prefix' => 'store-admin', 'middleware' => ['auth', 'web']],
// 'jqadm' => ['prefix' => 'admin/{site}/jqadm', 'middleware' => ['web', 'auth']],
'jqadm' => ['prefix' => 'store-admin/{site}/jqadm', 'middleware' => ['web', 'auth']],
// 'graphql' => ['prefix' => 'admin/{site}/graphql', 'middleware' => ['web', 'auth']],
'graphql' => false,
// 'jsonadm' => ['prefix' => 'admin/{site}/jsonadm', 'middleware' => ['web', 'auth']],
// 'jsonapi' => ['prefix' => 'jsonapi', 'middleware' => ['web', 'api']],
'jsonadm' => ['prefix' => 'store-admin/{site}/jsonadm', 'middleware' => ['web', 'auth']],
'jsonapi' => ['prefix' => 'store-jsonapi', 'middleware' => ['web', 'api']],
// 'account' => ['prefix' => 'profile', 'middleware' => ['web', 'auth']],
// 'default' => ['prefix' => 'shop', 'middleware' => ['web']],
'default' => false,
// 'confirm' => ['prefix' => 'shop', 'middleware' => ['web']],
'confirm' => false,
// 'supplier' => ['prefix' => 's', 'middleware' => ['web']],
// 'page' => ['prefix' => 'p', 'middleware' => ['web']],
// 'home' => ['middleware' => ['web']],
'home' => false,
// 'update' => [],
],
'page' => [
'account-index' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'account/profile', 'account/review', 'account/subscription', 'account/basket', 'account/history', 'account/favorite', 'account/watch', 'catalog/session'],
'basket-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'basket/standard', 'basket/bulk', 'basket/related'],
'catalog-count' => ['catalog/count'],
'catalog-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/stage', 'catalog/detail', 'catalog/session'],
'catalog-home' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/home'],
'catalog-list' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
'catalog-session' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'catalog/session'],
'catalog-stock' => ['catalog/stock'],
'catalog-suggest' => ['catalog/suggest'],
'catalog-tree' => ['locale/select', 'basket/mini', 'catalog/filter', 'catalog/tree', 'catalog/search', 'catalog/price', 'catalog/supplier', 'catalog/attribute', 'catalog/session', 'catalog/stage', 'catalog/lists'],
'checkout-confirm' => ['catalog/tree', 'catalog/search', 'checkout/confirm'],
'checkout-index' => ['locale/select', 'catalog/tree', 'catalog/search', 'checkout/standard'],
'checkout-update' => ['checkout/update'],
'supplier-detail' => ['locale/select', 'basket/mini', 'catalog/tree', 'catalog/search', 'supplier/detail', 'catalog/lists'],
'cms' => ['cms/page', 'catalog/tree', 'basket/mini'],
],
'resource' => [
'db' => [
'adapter' => config('database.connections.'.config('database.default', 'mysql').'.driver', 'mysql'),
'host' => env('DB_AIMEOS_HOST', 'localhost'),
'port' => env('DB_AIMEOS_PORT', '3306'),
'socket' => config('database.connections.'.config('database.default', 'mysql').'.unix_socket', ''),
'database' => env('DB_AIMEOS_DATABASE', 'aimeos'),
'username' => env('DB_AIMEOS_USERNAME', 'forge'),
'password' => env('DB_AIMEOS_PASSWORD', ''),
'stmt' => config('database.default', 'mysql') === 'mysql' ? ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"] : [],
'limit' => 3, // maximum number of concurrent database connections
'defaultTableOptions' => [
'charset' => config('database.connections.'.config('database.default', 'mysql').'.charset'),
'collate' => config('database.connections.'.config('database.default', 'mysql').'.collation'),
],
'driverOptions' => config('database.connections.'.config('database.default', 'mysql').'.options'),
],
'db-customer' => [
'adapter' => 'mysql',
'host' => 'localhost',
'port' => '3306',
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'stmt' => ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"],
'limit' => 2,
'opt-persistent' => 0
],
'fs' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path(),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/'),
],
'fs-media' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('aimeos'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/aimeos',
],
'fs-mimeicon' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('vendor/shop/mimeicons'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/vendor/shop/mimeicons',
],
'fs-theme' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => public_path('vendor/shop/themes'),
'baseurl' => rtrim(env('ASSET_URL', PHP_SAPI == 'cli' ? env('APP_URL') : ''), '/').'/vendor/shop/themes',
],
'fs-admin' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('admin'),
],
'fs-export' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('export'),
],
'fs-import' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('import'),
],
'fs-secure' => [
'adapter' => 'Standard',
'tempdir' => storage_path('tmp'),
'basedir' => storage_path('secure'),
],
'mq' => [
'adapter' => 'Standard',
'db' => 'db',
],
'email' => [
'from-email' => config('mail.from.address'),
'from-name' => config('mail.from.name'),
],
],
'admin' => [],
'client' => [
'html' => [
'basket' => [
'cache' => [
// 'enable' => false, // Disable basket content caching for development
],
],
'common' => [
'cache' => [
// 'force' => true // enforce caching for logged in users
],
],
'catalog' => [
'lists' => [
'basket-add' => true, // shows add to basket in list views
// 'infinite-scroll' => true, // load more products in list view
// 'size' => 48, // number of products per page
],
'selection' => [
'type' => [ // how variant attributes are displayed
'color' => 'radio',
'length' => 'radio',
'width' => 'radio',
],
],
],
],
],
'controller' => [
'frontend' => [
'catalog' => [
'levels-always' => 3, // number of category levels for mega menu
],
],
],
'i18n' => [],
'madmin' => [
'cache' => [
'manager' => [
// 'name' => 'None', // Disable caching for development
],
],
'log' => [
'manager' => [
// 'loglevel' => 7, // Enable debug logging into madmin_log table
],
],
],
'mshop' => [
'locale' => [
// 'site' => '<custom site code>', // used instead of "default"
],
],
'command' => [],
'frontend' => [],
'backend' => [],
];
Code: Select all
URL: https://site.test/store-admin
URL: https://site.test/login?locale=en
URL: https://site.test/dashboard
Status: 200
Source: Network
Address: 127.0.0.1:443
...
Redirect Response
302
Access-Control-Allow-Origin: *
Cache-Control: no-cache, private
Date: Thu, 06 Jun 2024 08:27:24 GMT
Location: https://site.test/login?locale=en
For first call debugger shows this gate error:
Code: Select all
admin [▼
"ability" => "admin"
"result" => null
"user" => 1
"arguments" => """
[
\n
0 => Aimeos\Shop\Controller\AdminController,
\n
1 => [
\n
0 => admin,
\n
1 => editor,
\n
2 => smart-administrator,
\n
3 => administrator
\n
]
\n
]
"""
]
Code: Select all
select * from `users` where `id` = 1 and `users`.`deleted_at` is null limit 1
1.08ms
main
EloquentUserProvider.php#59
Also, what is meant by data domain exactly?
Re: Allow Aimeos Admin route to load
Updated app/Providers/AuthServiceProvider.php with
based on config/shop.php
```
and now /store-admin redirected to store-admin/default/jqadm/search/dashboard?locale=en but I get another error
It seems the table is being retrieved from the main application not the Aimeos database. I did adjust matters to use main application for users data, but shop_customer_group should be gotten from aimeos database. What to do? Do I need to add another connection then? How ? I tried
But it did not work. I did php artisan config:cache and php artisan route:clear, but still the same error that the main application database was chosen to load the customer group table. But the data domains listed does not contain customer group either
In fact, there are 16 different data domains which can be stored in one database each.
Also added `resource.php` to `config` with
and emptied cache and re-cached config. No change. Clearly need to learn about data domains more.. or model scheme settings?
Code: Select all
...
Gate::define('admin', function (User $user) {
$role = data_get($user->role, 'name');
return in_array($role, [UserRole::EDITOR, UserRole::SUPER_ADMIN, 'admin']);
});
...
```
Code: Select all
...
'roles' => ['admin'], // user groups allowed to access the admin backend
...
Code: Select all
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'main-app.mshop_customer_group' doesn't exist: SELECT mcusgr."id" AS "customer.group.id", mcusgr."siteid" AS "customer.group.siteid", mcusgr."code" AS "customer.group.code", mcusgr."label" AS "customer.group.label", mcusgr."mtime" AS "customer.group.mtime", mcusgr."editor" AS "customer.group.editor", mcusgr."ctime" AS "customer.group.ctime" FROM "mshop_customer_group" mcusgr WHERE ( ( mcusgr."siteid" IN ('','1.') ) AND mcusgr."id" IN (NULL) ) ORDER BY mcusgr."id" ASC LIMIT 100 OFFSET 0
vendor/aimeos/aimeos-base/src/DB/Statement/DBAL/Simple.php#75
Code: Select all
'db-customer-group' => [
'adapter' => 'mysql',
'host' => env('DB_AIMEOS_HOST', 'localhost'),
'port' => env('DB_AIMEOS_PORT', '3306'),
'database' => env('DB_AIMEOS_DATABASE', 'aimeos'),
'username' => env('DB_AIMEOS_USERNAME', 'forge'),
'password' => env('DB_AIMEOS_PASSWORD', ''),
'stmt' => ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"],
'limit' => 2,
'opt-persistent' => 0
],
In fact, there are 16 different data domains which can be stored in one database each.
Also added `resource.php` to `config` with
Code: Select all
<?php
return [
'db-customer-group' => [
'adapter' => 'mysql',
'host' => env('DB_AIMEOS_HOST', 'localhost'),
'port' => env('DB_AIMEOS_PORT', '3306'),
'database' => env('DB_AIMEOS_DATABASE', 'aimeos'),
'username' => env('DB_AIMEOS_USERNAME', 'forge'),
'password' => env('DB_AIMEOS_PASSWORD', ''),
'stmt' => ["SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED"],
'limit' => 2,
'opt-persistent' => 0
],
];
Re: Allow Aimeos Admin route to load
I commented out db-customer in shop.php. Reason I removed db-customer data domain is that customer group will then also get loaded from main database and that caused other issues. I also used:
for roles and kept gate added to app/Providers/AuthServiceProvider.php
Then I got the error:
So App auth with new gate allows user to pass but jQAdmin does not. Error seems based on
Code: Select all
'roles' => ['admin', 'smart-administrator', 'administrator'], // user groups allowed to access the admin backend
Code: Select all
<?php
namespace App\Providers;
use App\Enums\UserRole;
use App\Models\Auth\User;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
\App\Models\Editor\Project::class => \App\Policies\ProjectPolicy::class,
\App\Order::class => \App\Policies\OrderPolicy::class,
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Gate::define('editor', function (User $user) {
return data_get($user->role, 'name') === UserRole::EDITOR;
});
// superadmin role Aimeos access
Gate::define('admin', function (User $user) {
$role = data_get($user->role, 'name');
return in_array($role, [UserRole::EDITOR, UserRole::SUPER_ADMIN, 'admin']);
});
}
}
Code: Select all
Aimeos\ Admin \ JQAdm \
Exception
PHP 8.2.15
9.52.16
Not allowed to access JQAdm "dashboard" client
Code: Select all
if( $view->access( $config->get( 'admin/jqadm/resource/' . $path . '/groups', [] ) ) !== true ) {
throw new \Aimeos\Admin\JQAdm\Exception( sprintf( 'Not allowed to access JQAdm "%1$s" client', $path ), 403 );
}
Re: Allow Aimeos Admin route to load
That error message looks like you are using 2023.10 or before, not current 2024.04 (there's nothing wrong with that, just to make sure):
When you configure "db-customer" connection to point to your main database, you also have to add the Aimeos admin accounts again because they are not in the "users" table of your main DB yet (only in the Aimeos DB):
Code: Select all
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'main-app.mshop_customer_group' doesn't exist
Code: Select all
php artisan aimeos:account --super you@example.com
Professional support and custom implementation are available at Aimeos.com
If you like Aimeos, give us a star
If you like Aimeos, give us a star