Browse Source

Permissions for issue and project roles. Better data load and some helper functions

Nathaniel van Diepen 9 years ago
parent
commit
c57a52620e

+ 0 - 43
install/db_install/00_tables/permissions.sql

@@ -16,49 +16,6 @@ CREATE TABLE IF NOT EXISTS `permissions` (
 -- RELATIONS FOR TABLE `permissions`:
 --
 
---
--- Dumping data for table `priorities`
---
-
-INSERT INTO `permissions` (`id`, `name`) VALUES
-(1,  '*'),
-(3,  'project-read'),
-(4,  'project-update'),
-(5,  'project-create'),
-(6,  'project-delete'),
-(7,  'issue-read'),
-(8,  'issue-update'),
-(9,  'issue-create'),
-(10, 'issue-delete'),
-(11, 'user-read'),
-(12, 'user-update'),
-(13, 'user-create'),
-(14, 'user-delete'),
-(15, 'message-read'),
-(16, 'message-update'),
-(17, 'message-create'),
-(18, 'message-delete'),
-(19, 'priority-read'),
-(20, 'priority-update'),
-(21, 'priority-create'),
-(23, 'priority-delete'),
-(24, 'session-read'),
-(25, 'session-update'),
-(26, 'session-create'),
-(27, 'session-delete'),
-(28, 'issue-role-read'),
-(29, 'issue-role-update'),
-(30, 'issue-role-create'),
-(31, 'issue-role-delete'),
-(32, 'project-role-read'),
-(33, 'project-role-update'),
-(34, 'project-role-create'),
-(35, 'project-role-delete'),
-(36, 'email-read'),
-(37, 'email-update'),
-(38, 'email-create'),
-(39, 'email-delete');
-
 --
 -- Indexes for table `permissions`
 --

+ 2 - 10
install/db_install/00_tables/project_roles.sql

@@ -9,21 +9,13 @@
 DROP TABLE IF EXISTS `project_roles`;
 CREATE TABLE IF NOT EXISTS `project_roles` (
   `id` int(10) NOT NULL,
-  `name` varchar(10) COLLATE utf8_bin NOT NULL
+  `name` varchar(50) COLLATE utf8_bin NOT NULL
 ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 
 --
 -- RELATIONS FOR TABLE `project_roles`:
 --
 
---
--- Dumping data for table `project_roles`
---
-
-INSERT INTO `project_roles` (`id`, `name`) VALUES
-(1, 'Developer'),
-(2, 'Tester');
-
 --
 -- Indexes for table `project_roles`
 --
@@ -34,4 +26,4 @@ ALTER TABLE `project_roles`
 -- AUTO_INCREMENT for table `project_roles`
 --
 ALTER TABLE `project_roles`
-  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
+  MODIFY `id` int(10) NOT NULL AUTO_INCREMENT;

+ 23 - 0
install/db_install/00_tables/r_issue_role_permission.sql

@@ -0,0 +1,23 @@
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `r_issue_role_permission`
+--
+-- Creation: Sep 03, 2015 at 12:02 PM
+--
+
+DROP TABLE IF EXISTS `r_issue_role_permission`;
+CREATE TABLE IF NOT EXISTS `r_issue_role_permission` (
+  `per_id` int(10) NOT NULL,
+  `r_id` int(10) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+--
+-- RELATIONS FOR TABLE `r_issue_role_permission`:
+--
+
+--
+-- Indexes for table `r_issue_role_permission`
+--
+ALTER TABLE `r_issue_role_permission`
+  ADD PRIMARY KEY (`per_id`,`r_id`);

+ 23 - 0
install/db_install/00_tables/r_project_role_permission.sql

@@ -0,0 +1,23 @@
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `r_project_role_permission`
+--
+-- Creation: Sep 03, 2015 at 12:02 PM
+--
+
+DROP TABLE IF EXISTS `r_project_role_permission`;
+CREATE TABLE IF NOT EXISTS `r_project_role_permission` (
+  `per_id` int(10) NOT NULL,
+  `r_id` int(10) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
+
+--
+-- RELATIONS FOR TABLE `r_project_role_permission`:
+--
+
+--
+-- Indexes for table `r_project_role_permission`
+--
+ALTER TABLE `r_project_role_permission`
+  ADD PRIMARY KEY (`per_id`,`r_id`);

+ 6 - 0
install/db_install/02_constraints/r_issue_role_permission.sql

@@ -0,0 +1,6 @@
+--
+-- Constraints for table `r_issue_role_permission`
+--
+ALTER TABLE `r_issue_role_permission`
+  ADD CONSTRAINT `r_issue_role_permission_ibfk_1` FOREIGN KEY (`per_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  ADD CONSTRAINT `r_issue_role_permission_ibfk_2` FOREIGN KEY (`r_id`) REFERENCES `issue_roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

+ 6 - 0
install/db_install/02_constraints/r_project_role_permission.sql

@@ -0,0 +1,6 @@
+--
+-- Constraints for table `r_project_role_permission`
+--
+ALTER TABLE `r_project_role_permission`
+  ADD CONSTRAINT `r_project_role_permission_ibfk_1` FOREIGN KEY (`per_id`) REFERENCES `permissions` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
+  ADD CONSTRAINT `r_project_role_permission_ibfk_2` FOREIGN KEY (`r_id`) REFERENCES `project_roles` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

+ 19 - 0
install/db_install/03_functions/issue_role.sql

@@ -0,0 +1,19 @@
+CREATE FUNCTION `issue_role`(
+	a_name VARCHAR(50)
+) RETURNS INT(10)
+DETERMINISTIC
+READS SQL DATA
+SQL SECURITY INVOKER
+BEGIN
+	DECLARE t_id INT(10);
+	SELECT id
+	INTO t_id
+	FROM issue_roles
+	WHERE name = a_name;
+	IF t_id IS NULL THEN
+		SET @error := CONCAT('Issue Role "',a_name,'" is not defined');
+		SIGNAL SQLSTATE '45000'
+		SET MESSAGE_TEXT = @error;
+	END IF;
+	return t_id;
+END;

+ 19 - 0
install/db_install/03_functions/permission.sql

@@ -0,0 +1,19 @@
+CREATE FUNCTION `permission`(
+	a_name VARCHAR(50)
+) RETURNS INT(10)
+DETERMINISTIC
+READS SQL DATA
+SQL SECURITY INVOKER
+BEGIN
+	DECLARE t_id INT(10);
+	SELECT id
+	INTO t_id
+	FROM permissions
+	WHERE name = a_name;
+	IF t_id IS NULL THEN
+		SET @error := CONCAT('Permission "',a_name,'" is not defined');
+		SIGNAL SQLSTATE '45000'
+		SET MESSAGE_TEXT = @error;
+	END IF;
+	return t_id;
+END;

+ 19 - 0
install/db_install/03_functions/project_role.sql

@@ -0,0 +1,19 @@
+CREATE FUNCTION `project_role`(
+	a_name VARCHAR(50)
+) RETURNS INT(10)
+DETERMINISTIC
+READS SQL DATA
+SQL SECURITY INVOKER
+BEGIN
+	DECLARE t_id INT(10);
+	SELECT id
+	INTO t_id
+	FROM project_roles
+	WHERE name = a_name;
+	IF t_id IS NULL THEN
+		SET @error := CONCAT('Project Role "',a_name,'" is not defined');
+		SIGNAL SQLSTATE '45000'
+		SET MESSAGE_TEXT = @error;
+	END IF;
+	return t_id;
+END;

+ 66 - 0
install/db_install/99_postinstall/deferred_data.sql

@@ -0,0 +1,66 @@
+INSERT INTO `permissions` (`name`) VALUES
+('*'),
+('project-read'),
+('project-update'),
+('project-create'),
+('project-delete'),
+('issue-read'),
+('issue-update'),
+('issue-create'),
+('issue-delete'),
+('user-read'),
+('user-update'),
+('user-create'),
+('user-delete'),
+('message-read'),
+('message-update'),
+('message-create'),
+('message-delete'),
+('priority-read'),
+('priority-update'),
+('priority-create'),
+('priority-delete'),
+('session-read'),
+('session-update'),
+('session-create'),
+('session-delete'),
+('issue-role-read'),
+('issue-role-update'),
+('issue-role-create'),
+('issue-role-delete'),
+('project-role-read'),
+('project-role-update'),
+('project-role-create'),
+('project-role-delete'),
+('email-read'),
+('email-update'),
+('email-create'),
+('email-delete');
+
+INSERT INTO `issue_roles` (`name`) VALUES
+('Developer'),
+('Tester'),
+('Contact');
+
+INSERT INTO `r_issue_role_permission` (`r_id`,`per_id`) VALUES
+(issue_role('Developer'),permission('issue-read')),
+(issue_role('Developer'),permission('issue-update')),
+(issue_role('Tester'),permission('issue-read')),
+(issue_role('Tester'),permission('issue-update')),
+(issue_role('Contact'),permission('issue-read'));
+
+INSERT INTO `project_roles` (`name`) VALUES
+('Project Manager'),
+('Developer'),
+('Tester');
+
+INSERT INTO `r_project_role_permission` (`r_id`,`per_id`) VALUES
+(project_role('Project Manager'),permission('issue-read')),
+(project_role('Project Manager'),permission('issue-create')),
+(project_role('Project Manager'),permission('issue-delete')),
+(project_role('Project Manager'),permission('project-read')),
+(project_role('Project Manager'),permission('project-update')),
+(project_role('Project Manager'),permission('project-delete')),
+(project_role('Developer'),permission('issue-create')),
+(project_role('Developer'),permission('project-read')),
+(project_role('Tester'),permission('project-read'));

+ 2 - 0
install/db_uninstall/01_data/tables.sql

@@ -3,6 +3,8 @@ CALL drop_table('activities');
 CALL drop_table('actions');
 CALL drop_table('r_permission_user');
 CALL drop_table('r_message_user');
+CALL drop_table('r_issue_role_permission');
+CALL drop_table('r_project_role_permission');
 CALL drop_table('r_issue_user');
 CALL drop_table('r_project_user');
 CALL drop_table('project_roles');

+ 4 - 1
install/db_uninstall/99_cleanup/functions.sql

@@ -1,2 +1,5 @@
 DROP FUNCTION IF EXISTS `getsetting`;
-DROP FUNCTION IF EXISTS `setsetting`;
+DROP FUNCTION IF EXISTS `setsetting`;
+DROP FUNCTION IF EXISTS `permission`;
+DROP FUNCTION IF EXISTS `project_role`;
+DROP FUNCTION IF EXISTS `issue_role`;