【发布时间】:2011-07-15 19:54:53
【问题描述】:
首先,对不起我的语言能力,我不习惯用英语写作。 ;)
我正在尝试开发我的第一个 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`)
)
谢谢
【问题讨论】:
标签: cakephp permissions authorization cakephp-1.3 row-level-security