首先,对不起我的语言能力,我不习惯用英语写作。;)
我正在尝试开发我的第一个 cakePHP 应用程序。
我正在尝试做的事情:
- 用户在组中,并且组可以访问不同的位置。
- 用户可以为此位置添加预订。
所以我的主要问题是找到获得用户权限的最佳方法:
- 用户应该只看到他有权访问的位置。
- 如果用户尝试为某个位置添加预订,我必须检查他对该位置的许可。
- 等等
我也有版主和管理员,但我认为这是一个类似的问题。
那么,我怎样才能正确地做到这一点?ACL 似乎不是正确的方法 - 在大多数教程中,它控制对操作的访问,而不是对 db-rows 的访问。
我的数据库是什么样的:
我有一个用户表并使用 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`)
)
谢谢