まず、私の語学力で申し訳ありませんが、私は英語で書くことに慣れていません。;)
初めての CakePHP アプリケーションを開発しようとしています。
私がやろうとしていること:
- ユーザーはグループに属しており、グループはさまざまな場所にアクセスできます。
- ユーザーは、この場所の予約を追加できます。
したがって、私の主な問題は、ユーザーのアクセス許可を取得するための最良の方法を見つけることです:
- ユーザーは、自分がアクセスできる場所のみを表示する必要があります。
- ユーザーが場所の予約を追加しようとすると、この場所に対するユーザーの許可を確認する必要があります。
- 等
モデレーターと管理者もいますが、これは同様の問題だと思います。
では、どうすればこれを適切に行うことができますか?ACL は正しい方法ではないようです。ほとんどのチュートリアルでは、データベース行ではなく、アクションへのアクセスを制御しています。
データベースの外観:
ユーザー テーブルがあり、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