Ticketa
Registered
Имам запис в таблицата test_roles и този запис има записи, създадени/съществуващи като привилегия в test_permissions, тогава тези привилегии са НЕПРЕДНАЗНАЧЕНИ.
Въпреки това, ако имаме записи в таблицата test_role_permissions, които съответстват на привилегиите от таблицата test_permissions, тогава тези привилегии са ПРИЗНАЧЕНИ. Обаче моята заявка изкарва грешен резултат и не мога вече над 1ч да го оправя (може би почивка? хах..)
виждам:
а трябва да бъде
Въпреки това, ако имаме записи в таблицата test_role_permissions, които съответстват на привилегиите от таблицата test_permissions, тогава тези привилегии са ПРИЗНАЧЕНИ. Обаче моята заявка изкарва грешен резултат и не мога вече над 1ч да го оправя (може би почивка? хах..)
SQL:
SELECT
p.controller,
p.name AS action,
IF(rp.role IS NULL, "UNASSIGNED", "ASSIGNED") AS assigned
FROM
test_permissions p
LEFT JOIN test_role_permissions rp ON p.name = rp.permission AND rp.role = "editors"
WHERE
p.controller IN ("Admin/Blog", "Admin/Activities", "Admin/Languages", "Admin/Users")
ORDER BY
p.controller, p.name;
виждам:
controller
| action | assigned | |
|---|---|---|---|
| Admin/Activities | view | ASSIGNED | |
| Admin/Blog | add | ASSIGNED | |
| Admin/Blog | delete | ASSIGNED | |
| Admin/Blog | edit | ASSIGNED | |
| Admin/Blog | view | ASSIGNED | |
| Admin/Languages | add | ASSIGNED | |
| Admin/Languages | delete | ASSIGNED | |
| Admin/Languages | edit | ASSIGNED | |
| Admin/Languages | view | ASSIGNED | |
| Admin/Users | add | ASSIGNED | |
| Admin/Users | edit | ASSIGNED | |
| Admin/Users | view | ASSIGNED |
а трябва да бъде
controller
| action | assigned | |
|---|---|---|---|
| Admin/Activities | view | UNASSIGNED | |
| Admin/Blog | add | ASSIGNED | |
| Admin/Blog | delete | ASSIGNED | |
| Admin/Blog | edit | ASSIGNED | |
| Admin/Blog | view | ASSIGNED | |
| Admin/Languages | add | UNASSIGNED | |
| Admin/Languages | delete | UNASSIGNED | |
| Admin/Languages | edit | UNASSIGNED | |
| Admin/Languages | view | UNASSIGNED | |
| Admin/Users | add | UNASSIGNED | |
| Admin/Users | edit | UNASSIGNED | |
| Admin/Users | view | UNASSIGNED |
SQL:
CREATE TABLE `test_permissions` (
`id` int NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`controller` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test_permissions` (`id`, `name`, `controller`, `description`) VALUES
(1, '*', NULL, 'All permissions'),
(2, 'view', NULL, 'View permission'),
(3, 'edit', NULL, 'Edit permission'),
(4, 'delete', NULL, 'Delete permission'),
(5, 'add', NULL, 'Add permission'),
(6, 'view', 'Admin/Blog', 'View permission'),
(7, 'edit', 'Admin/Blog', 'Edit permission'),
(8, 'delete', 'Admin/Blog', 'Delete permission'),
(9, 'add', 'Admin/Blog', 'Add permission'),
(10, 'view', 'Admin/Users', 'View permission'),
(11, 'edit', 'Admin/Users', 'Edit permission'),
(12, 'add', 'Admin/Users', 'Add permission'),
(13, 'view', 'Admin/Languages', 'View permission'),
(14, 'edit', 'Admin/Languages', 'Edit permission'),
(15, 'delete', 'Admin/Languages', 'Delete permission'),
(16, 'add', 'Admin/Languages', 'Add permission'),
(17, 'view', 'Admin/Activities', 'View permission');
CREATE TABLE `test_roles` (
`id` int NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`parent_role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test_roles` (`id`, `name`, `parent_role`, `Description`) VALUES
(1, 'root', NULL, 'Full access'),
(2, 'admin', NULL, 'Can access everything except delete'),
(3, 'user', NULL, 'Can only view'),
(4, 'editors', NULL, 'Can access everything except settings');
CREATE TABLE `test_role_permissions` (
`id` int NOT NULL,
`role` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`controller` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test_role_permissions` (`id`, `role`, `permission`, `controller`) VALUES
(1, 'root', '*', '*'),
(2, 'root', 'add', '*'),
(3, 'root', 'delete', '*'),
(4, 'root', 'edit', '*'),
(5, 'root', 'view', '*'),
(8, 'admin', 'view', '*'),
(9, 'admin', 'edit', '*'),
(10, 'admin', 'add', '*'),
(11, 'user', 'view', '*'),
(12, 'admin', 'delete', 'Admin/Home'),
(13, 'editors', 'view', 'Admin/Blog'),
(14, 'editors', 'edit', 'Admin/Blog'),
(15, 'editors', 'delete', 'Admin/Blog'),
(16, 'editors', 'add', 'Admin/Blog');
ALTER TABLE `test_permissions`
ADD PRIMARY KEY (`id`),
ADD KEY `name` (`name`);
ALTER TABLE `test_roles`
ADD PRIMARY KEY (`id`),
ADD KEY `name` (`name`),
ADD KEY `name_2` (`name`);
ALTER TABLE `test_role_permissions`
ADD PRIMARY KEY (`id`),
ADD KEY `role` (`role`),
ADD KEY `permission` (`permission`);
ALTER TABLE `test_permissions`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18;
ALTER TABLE `test_roles`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
ALTER TABLE `test_role_permissions`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=17;
ALTER TABLE `test_role_permissions`
ADD CONSTRAINT `test_role_permissions_ibfk_1` FOREIGN KEY (`role`) REFERENCES `test_roles` (`name`),
ADD CONSTRAINT `test_role_permissions_ibfk_2` FOREIGN KEY (`permission`) REFERENCES `test_permissions` (`name`);
COMMIT;