Her şeyden önce, ben bir tek alana tüm izinleri birleştirerek ekarte olacak. Bu ilk başta ekonomik gibi görünüyor, ama hiç izin yapısını genişletmek veya değiştirmek gerekir eğer bir sorun biraz dönüşebilir.
Kullanıcı tabloda her izin için bir sütun oluşturmak basit bir sistem için iyi bir tasarım, ama may gelecekteki genişleme sınırı.
Ben kullanıcılar ve izinler arasında çok-çok ilişkisi uygulanması önerilir. Bu şema değiştirmeden istediğiniz izinleri gibi birçok türde eklemenizi sağlar. Bu katılmak bir basit ile sorgulamak çok kolay, ve diğer veritabanları için taşınabilir.
İki yeni tablolar oluşturarak bu başarmak. Aşağıdaki şemayı varsayarak:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(100),
-- other user fields --
);
Biz böyle M2M izinler şemayı ekleyebilirsiniz:
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
);
Daha sonra bazı örnek kullanıcıları ve izinleri ekleyebilirsiniz:
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');
Ve nihayet şöyle izinleri ile kullanıcılara ilişkilendirmek:
-- 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);
Küçük bir blog için, böyle esnek bir şema gerek olmayabilir, ama bu kanıtlanmış bir tasarımdır. Eğer isterseniz, aynı zamanda bu bir adım daha atın ve bir rol sistemi oluşturabilirsiniz. Bu, her kullanıcıya bir rol (tek-çok) vererek çalışır, ve her rol izinleri bir numarası vardır (çok-çok). Bu şekilde izinleri bir kullanıcı başına ayarlanmış olması gerekmez, ve sadece onlara "Yönetici" gibi bir rol atamak veya bu rol için ilgili izinleri ile birlikte "Editör" ya da "Katılımcı", olabilir.