Прежде всего, я бы исключил объединение всех разрешений в одно поле. Поначалу это кажется экономичным, но может превратиться в небольшую проблему, если вам когда-нибудь понадобится расширить или изменить структуру разрешений.
Создание столбца для каждого разрешения в пользовательской таблице - хороший вариант для простой системы, но может ограничить вашу возможность расширения в будущем.
Я рекомендую реализовать отношение «многие ко многим» между пользователями и разрешениями. Это позволяет вам добавлять столько типов разрешений, сколько вам нужно, без изменения схемы. Это очень легко сделать запрос с помощью простого объединения и переносится на другие базы данных.
Это достигается созданием двух новых таблиц. Предполагая следующую схему:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(100),
-- other user fields --
);
Мы можем добавить схему разрешений m2m следующим образом:
CREATE TABLE `permissions` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL UNIQUE,
);
CREATE TABLE `users_permissions` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY_KEY,
`user_id` INT NOT NULL,
`permission_id` INT NOT NULL
);
Затем вы можете добавить несколько примеров пользователей и разрешений:
INSERT INTO `users` (DEFAULT, 'joe');
INSERT INTO `users` (DEFAULT, 'beth');
INSERT INTO `users` (DEFAULT, 'frank');
INSERT INTO `permissions` (DEFAULT, 'Administrator');
INSERT INTO `permissions` (DEFAULT, 'Write Blog');
INSERT INTO `permissions` (DEFAULT, 'Edit Blog');
INSERT INTO `permissions` (DEFAULT, 'Delete Blog');
И, наконец, вы можете ассоциировать пользователей с разрешениями, например так:
-- joe gets all permissions
INSERT INTO `permissions` (DEFAULT, 1, 1);
INSERT INTO `permissions` (DEFAULT, 1, 2);
INSERT INTO `permissions` (DEFAULT, 1, 3);
INSERT INTO `permissions` (DEFAULT, 1, 4);
-- beth can write and edit
INSERT INTO `permissions` (DEFAULT, 2, 2);
INSERT INTO `permissions` (DEFAULT, 2, 3);
-- frank can only write
INSERT INTO `permissions` (DEFAULT, 3, 2);
Для небольшого блога вам может не понадобиться такая гибкая схема, но это проверенный дизайн. Если хотите, вы можете сделать еще один шаг вперед и создать систему ролей. Это работает путем предоставления каждому пользователю роли (один ко многим), и каждая роль имеет ряд разрешений (многие ко многим). Таким образом, нет необходимости устанавливать разрешения для каждого пользователя, и вы можете просто назначить им роль, например «Администратор», «Редактор» или «Участник», вместе со связанными разрешениями для этой роли.