Ik ben bezig met database een opzetje voor mijn ACL class.
Echter is SQL nou niet echt mijn ding dus vandaar ik hier mijn vraag post.
Om te beginnen zal ik eerst mijn tabellen laten zien:
CREATE TABLE IF NOT EXISTS users ( id int(10) NOT NULL AUTO_INCREMENT,
username varchar(30) COLLATE utf8_bin NOT NULL,
password varchar(255) COLLATE utf8_bin NOT NULL,
email varchar(50) COLLATE utf8_bin NOT NULL,
created_at datetime NOT NULL,
last_login datetime NOT NULL,
login_hash varchar(255) COLLATE utf8_bin NOT NULL,
group_id INT(10) DEFAULT '1',
PRIMARY KEY (id),
UNIQUE KEY email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS usergroups ( group_id int(10) NOT NULL AUTO_INCREMENT,
group_name VARCHAR(100) NOT NULL,
PRIMARY KEY (group_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS permissions ( pid INT(10) NOT NULL AUTO_INCREMENT,
permission_name VARCHAR(100) NOT NULL,
PRIMARY KEY (pid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS user_permission ( user_pid INT(10) NOT NULL AUTO_INCREMENT,
permission_code INT(10) NOT NULL,
PRIMARY KEY (user_pid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1;
Op zich allemaal vrij standaard denk ik, dus dat is niet echt het probleem.
Nu heb ik 1 relatie aangelegd tussen usergroups en de user:
ALTER TABLE
users
ADD
FOREIGN KEY(group_id)
REFERENCES usergroups (group_id)
ON DELETE RESTRICT
ON UPDATE CASCADE
Dat werkt, dus so far so good. DEFAULT '1' in het user tabel word gewoon iets van "member" in de usergroups.
Nu moet er (lijkt mij) ook een relatie komen tussen wat de users mogen doen.
Hier gaat mijn ACL class aan het werk, door alle permissies een bepaalde code te genereren.
Dus uiteindelijk als alle permissies bij elkaar komen heb ik 1 code die weer de database in moeten.
Nu komt het eigenlijke probleem.
Hoe leg ik die relatie het handigst aan? (als daar een relatie zou moeten komen)
Ik kan er ook voor kiezen om de code in de user tabel te zetten.
Ik kan er ook een tabel (wat ik hierboven heb staan) in een apart tabel zetten.
Maar heeft dat voordeel? En zo ja, hoe ga ik die refereren aan elkaar?