Во-первых, извините за мои языковые навыки, я не привык писать по-английски.;)
Я пытаюсь разработать свое первое приложение cakePHP.
Что я пытаюсь сделать:
- Пользователи в группах и группы имеют доступ к разным местоположениям,
- Пользователи могут добавлять бронирование для этих мест.
Поэтому моя главная проблема - найти лучший способ получить разрешения пользователя:
- Пользователь должен видеть только те места, к которым у него есть доступ.
- Если пользователь пытается добавить бронирование для местоположения, я должен проверить его разрешение для этого местоположения.
- и т. Д.
У меня также есть модераторы и администраторы, но я думаю, что это аналогичная проблема.
Итак, как я могу сделать это правильно?ACL, кажется, не является правильным способом - в большинстве уроков он контролирует доступ к действиям, а не к db-строкам.
Как выглядит моя база данных:
У меня есть таблица пользователей и я использую AuthComponent для управления аутентификацией.Это отлично работает.
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(64) NOT NULL,
`password` varchar(64) NOT NULL,
`enabled` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
)
У меня есть таблица групп для групп пользователей.
CREATE TABLE IF NOT EXISTS `groups` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
CREATE TABLE IF NOT EXISTS `groups_users` (
`group_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
UNIQUE KEY `group_id` (`group_id`,`user_id`)
)
И у меня есть мои местоположения.
CREATE TABLE IF NOT EXISTS `locations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`adress` text NOT NULL,
`description` text,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
)
Таблица содержит разрешениякакая группа имеет доступ к какому местоположению.
CREATE TABLE IF NOT EXISTS `groups_locations` (
`group_id` int(11) NOT NULL,
`location_id` int(11) NOT NULL,
UNIQUE KEY `group_id` (`group_id`,`location_id`)
)
Конечно, таблица бронирования:
CREATE TABLE IF NOT EXISTS `reservations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`location_id` int(11) NOT NULL,
`start` date NOT NULL,
`end` date NOT NULL,
`user_id` int(11) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
)
THX