没有为具有所有权限的角色 "admin" 的用户显示 Voyager 管理菜单
Voyager admin menu isn't shown for user with role "admin" with all permissions
我在应用程序前端通过常规 "Register" link 创建了新用户,然后发出
php artisan voyager:admin this_user@mail.com
并使用此用户的登录名和密码登录到 Voyager。我看到的是左侧面板中的空 space 而不是管理菜单:
我检查了数据库中的角色和权限。在 users
table 中,此用户已将 role_id
设置为 1
,即 table roles
中的 "admin" 并拥有permission_role
。好像还行吧。
为什么这个用户看不到管理菜单?
事实证明,数据库中缺少两个表:data_rows
和 data_types
。我用这个重新创建了它们:
CREATE TABLE IF NOT EXISTS `data_types` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name_singular` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name_plural` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`model_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`policy_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`controller` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`generate_permissions` tinyint(1) NOT NULL DEFAULT '0',
`server_side` tinyint(4) NOT NULL DEFAULT '0',
`details` text COLLATE utf8_unicode_ci,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `data_types_name_unique` (`name`),
UNIQUE KEY `data_types_slug_unique` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `data_rows` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`data_type_id` int(10) unsigned NOT NULL,
`field` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`required` tinyint(1) NOT NULL DEFAULT '0',
`browse` tinyint(1) NOT NULL DEFAULT '1',
`read` tinyint(1) NOT NULL DEFAULT '1',
`edit` tinyint(1) NOT NULL DEFAULT '1',
`add` tinyint(1) NOT NULL DEFAULT '1',
`delete` tinyint(1) NOT NULL DEFAULT '1',
`details` text COLLATE utf8_unicode_ci,
`order` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `data_rows_data_type_id_foreign` (`data_type_id`),
CONSTRAINT `data_rows_data_type_id_foreign` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
然后我通过发出命令播种它们:
php artisan db:seed --class=DataTypesTableSeeder
php artisan db:seed --class=DataRowsTableSeeder
现在一切正常!
我在应用程序前端通过常规 "Register" link 创建了新用户,然后发出
php artisan voyager:admin this_user@mail.com
并使用此用户的登录名和密码登录到 Voyager。我看到的是左侧面板中的空 space 而不是管理菜单:
我检查了数据库中的角色和权限。在 users
table 中,此用户已将 role_id
设置为 1
,即 table roles
中的 "admin" 并拥有permission_role
。好像还行吧。
为什么这个用户看不到管理菜单?
事实证明,数据库中缺少两个表:data_rows
和 data_types
。我用这个重新创建了它们:
CREATE TABLE IF NOT EXISTS `data_types` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name_singular` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name_plural` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`icon` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`model_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`policy_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`controller` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`generate_permissions` tinyint(1) NOT NULL DEFAULT '0',
`server_side` tinyint(4) NOT NULL DEFAULT '0',
`details` text COLLATE utf8_unicode_ci,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `data_types_name_unique` (`name`),
UNIQUE KEY `data_types_slug_unique` (`slug`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `data_rows` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`data_type_id` int(10) unsigned NOT NULL,
`field` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`display_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`required` tinyint(1) NOT NULL DEFAULT '0',
`browse` tinyint(1) NOT NULL DEFAULT '1',
`read` tinyint(1) NOT NULL DEFAULT '1',
`edit` tinyint(1) NOT NULL DEFAULT '1',
`add` tinyint(1) NOT NULL DEFAULT '1',
`delete` tinyint(1) NOT NULL DEFAULT '1',
`details` text COLLATE utf8_unicode_ci,
`order` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `data_rows_data_type_id_foreign` (`data_type_id`),
CONSTRAINT `data_rows_data_type_id_foreign` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
然后我通过发出命令播种它们:
php artisan db:seed --class=DataTypesTableSeeder
php artisan db:seed --class=DataRowsTableSeeder
现在一切正常!