11-- MySQL Script generated by MySQL Workbench
2- -- Tue Sep 15 19:58:14 2020
2+ -- Tue Sep 15 20:27:02 2020
33-- Model: New Model Version: 1.0
44-- MySQL Workbench Forward Engineering
55
@@ -363,15 +363,15 @@ END$$
363363DELIMITER ;
364364
365365-- -----------------------------------------------------
366- -- procedure rebuild_mat_view
366+ -- procedure rebuild_userperms
367367-- -----------------------------------------------------
368368
369369USE ` bbdata2` ;
370- DROP procedure IF EXISTS ` rebuild_mat_view ` ;
370+ DROP procedure IF EXISTS ` rebuild_userperms ` ;
371371
372372DELIMITER $$
373373USE ` bbdata2` $$
374- CREATE PROCEDURE ` rebuild_mat_view ` ()
374+ CREATE PROCEDURE ` rebuild_userperms ` ()
375375BEGIN
376376 DELETE FROM userperms; -- don't use truncate: aises an error when called from a trigger
377377 INSERT IGNORE INTO userperms
@@ -418,6 +418,39 @@ END$$
418418
419419DELIMITER ;
420420
421+ -- -----------------------------------------------------
422+ -- procedure rebuild_userperms_oid
423+ -- -----------------------------------------------------
424+
425+ USE ` bbdata2` ;
426+ DROP procedure IF EXISTS ` rebuild_userperms_oid` ;
427+
428+ DELIMITER $$
429+ USE ` bbdata2` $$
430+ CREATE PROCEDURE ` rebuild_userperms_oid` (IN oid INT )
431+ BEGIN
432+ -- same as rebuild_userperms, but delete/insert only lines with the given object
433+ -- this is an optimisation: objects are often created/altered so it is worth it !
434+ DELETE FROM userperms WHERE object_id = oid ;
435+ INSERT IGNORE INTO userperms
436+ SELECT DISTINCT * FROM (
437+ -- all admin members of the ugrp owner of the object have write permission
438+ SELECT ug .user_id , o .id , ug .is_admin
439+ FROM users_ugrps ug INNER JOIN objects o ON o .ugrp_id = ug .ugrp_id
440+ WHERE o .id = oid
441+ UNION
442+ -- all members of an ugrp added to an object group having the object have read permission
443+ SELECT ug .user_id , og .object_id , 0
444+ FROM users_ugrps ug
445+ INNER JOIN rights r ON ug .ugrp_id = r .ugrp_id
446+ INNER JOIN objects_ogrps og ON r .ogrp_id = og .ogrp_id
447+ INNER JOIN objects o ON og .object_id = o .id AND o .id = oid
448+ WHERE ug .ugrp_id <> o .ugrp_id
449+ ) tmp;
450+ END$$
451+
452+ DELIMITER ;
453+
421454-- -----------------------------------------------------
422455-- View `ogrps_read`
423456-- -----------------------------------------------------
@@ -476,7 +509,7 @@ USE `bbdata2`$$
476509CREATE TRIGGER `objects_AINS ` AFTER INSERT ON ` objects` FOR EACH ROW
477510 -- DAFUCK ???!!!!
478511 -- INSERT IGNORE INTO objects_ogrps(ogrp_id, object_id) VALUES (NEW.ugrp_id, NEW.id);
479- CALL rebuild_mat_view( );$$
512+ CALL rebuild_userperms_oid( NEW . id );$$
480513
481514
482515USE ` bbdata2` $$
@@ -494,49 +527,49 @@ USE `bbdata2`$$
494527DROP TRIGGER IF EXISTS ` objects_ADEL` $$
495528USE ` bbdata2` $$
496529CREATE TRIGGER `objects_ADEL ` AFTER DELETE ON ` objects` FOR EACH ROW
497- CALL rebuild_mat_view( );$$
530+ CALL rebuild_userperms_oid( OLD . id );$$
498531
499532
500533USE ` bbdata2` $$
501534DROP TRIGGER IF EXISTS ` objects_ogrps_AINS` $$
502535USE ` bbdata2` $$
503536CREATE TRIGGER `objects_ogrps_AINS ` AFTER INSERT ON ` objects_ogrps` FOR EACH ROW
504- CALL rebuild_mat_view( );$$
537+ CALL rebuild_userperms_oid( NEW . object_id );$$
505538
506539
507540USE ` bbdata2` $$
508541DROP TRIGGER IF EXISTS ` objects_ogrps_ADEL` $$
509542USE ` bbdata2` $$
510543CREATE TRIGGER `objects_ogrps_ADEL ` AFTER DELETE ON ` objects_ogrps` FOR EACH ROW
511- CALL rebuild_mat_view( );$$
544+ CALL rebuild_userperms_oid( OLD . object_id );$$
512545
513546
514547USE ` bbdata2` $$
515548DROP TRIGGER IF EXISTS ` rights_AINS` $$
516549USE ` bbdata2` $$
517550CREATE TRIGGER `rights_AINS ` AFTER INSERT ON ` rights` FOR EACH ROW
518- CALL rebuild_mat_view ();$$
551+ CALL rebuild_userperms ();$$
519552
520553
521554USE ` bbdata2` $$
522555DROP TRIGGER IF EXISTS ` rights_ADEL` $$
523556USE ` bbdata2` $$
524557CREATE TRIGGER `rights_ADEL ` AFTER DELETE ON ` rights` FOR EACH ROW
525- CALL rebuild_mat_view ();$$
558+ CALL rebuild_userperms ();$$
526559
527560
528561USE ` bbdata2` $$
529562DROP TRIGGER IF EXISTS ` users_ugrps_AINS` $$
530563USE ` bbdata2` $$
531564CREATE TRIGGER `users_ugrps_AINS ` AFTER INSERT ON ` users_ugrps` FOR EACH ROW
532- CALL rebuild_mat_view() $$
565+ CALL rebuild_userperms(); $$
533566
534567
535568USE ` bbdata2` $$
536569DROP TRIGGER IF EXISTS ` users_ugrps_ADEL` $$
537570USE ` bbdata2` $$
538571CREATE TRIGGER `users_ugrps_ADEL ` AFTER DELETE ON ` users_ugrps` FOR EACH ROW
539- CALL rebuild_mat_view ();$$
572+ CALL rebuild_userperms ();$$
540573
541574
542575DELIMITER ;
0 commit comments