mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-04-17 13:50:17 +00:00
The prefix_match field and rt_inverse field are removed from relationship_type
because that model was too complex to be useful. We also explicitly indicate whether the relationship source or destination are groups separately.
This commit is contained in:
parent
46f26926c4
commit
7a1b2a0dd0
@ -17,20 +17,20 @@ INSERT INTO role_member (user_no, role_no) VALUES(1, 1);
|
||||
-- Set the insert sequence to the next number, with a minimum of 1000
|
||||
SELECT setval('usr_user_no_seq', (SELECT 1000 UNION SELECT user_no FROM usr ORDER BY 1 DESC LIMIT 1) );
|
||||
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match )
|
||||
VALUES( 1, 'Administers Group', TRUE, 'A', '' );
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers )
|
||||
VALUES( 1, 'Administers Group', TRUE, 'A' );
|
||||
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match )
|
||||
VALUES( 2, 'is Assistant to', FALSE, 'RW', '' );
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers )
|
||||
VALUES( 2, 'is Assistant to', FALSE, 'RW' );
|
||||
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match )
|
||||
VALUES( 3, 'Is a member of group', TRUE, 'R', '' );
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers )
|
||||
VALUES( 3, 'Is a member of group', TRUE, 'R' );
|
||||
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match )
|
||||
VALUES( 4, 'Administers Resource', FALSE, 'A', '' );
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers )
|
||||
VALUES( 4, 'Administers Resource', FALSE, 'A' );
|
||||
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers, prefix_match )
|
||||
VALUES( 5, 'Can see free/busy time of', FALSE, 'F', '' );
|
||||
INSERT INTO relationship_type ( rt_id, rt_name, rt_isgroup, confers )
|
||||
VALUES( 5, 'Can see free/busy time of', FALSE, 'F' );
|
||||
|
||||
|
||||
-- Set the insert sequence to the next number, with a minimum of 1000
|
||||
|
||||
@ -236,7 +236,7 @@ BEGIN
|
||||
|
||||
-- dbg := ''S-'';
|
||||
SELECT rt1.confers INTO out_confers FROM relationship r1 JOIN relationship_type rt1 USING ( rt_id )
|
||||
WHERE NOT rt1.rt_isgroup AND r1.from_user = in_from AND r1.to_user = in_to;
|
||||
WHERE NOT rt1.rt_togroup AND r1.from_user = in_from AND r1.to_user = in_to;
|
||||
IF FOUND THEN
|
||||
RETURN dbg || out_confers;
|
||||
END IF;
|
||||
@ -244,7 +244,7 @@ BEGIN
|
||||
|
||||
SELECT rt1.confers, rt2.confers INTO out_confers, tmp_confers FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id )
|
||||
LEFT OUTER JOIN relationship r2 ON ( r1.to_user = r2.from_user ) JOIN relationship_type rt2 ON ( r2.rt_id = rt2.rt_id )
|
||||
WHERE rt1.rt_isgroup AND NOT rt2.rt_isgroup AND r1.from_user = in_from AND r2.to_user = in_to;
|
||||
WHERE rt1.rt_togroup AND NOT rt2.rt_togroup AND r1.from_user = in_from AND r2.to_user = in_to;
|
||||
|
||||
IF FOUND THEN
|
||||
-- RAISE NOTICE ''Permissions to group % from group %'', out_confers, tmp_confers;
|
||||
@ -271,7 +271,7 @@ BEGIN
|
||||
|
||||
SELECT rt1.confers INTO out_confers, tmp_confers FROM relationship r1 JOIN relationship_type rt1 ON ( r1.rt_id = rt1.rt_id )
|
||||
LEFT OUTER JOIN relationship r2 ON ( rt1.rt_id = r2.rt_id )
|
||||
WHERE rt1.rt_isgroup AND r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user
|
||||
WHERE rt1.rt_togroup AND r1.from_user = in_from AND r2.from_user = in_to AND r1.from_user != r2.from_user AND r1.to_user = r2.to_user
|
||||
AND NOT EXISTS( SELECT 1 FROM relationship r3 WHERE r3.from_user = r1.to_user ) ;
|
||||
|
||||
IF FOUND THEN
|
||||
|
||||
15
dba/patches/1.1.7.sql
Normal file
15
dba/patches/1.1.7.sql
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
-- Adding lock support
|
||||
|
||||
BEGIN;
|
||||
SELECT check_db_revision(1,1,6);
|
||||
|
||||
ALTER TABLE relationship_type DROP COLUMN rt_inverse;
|
||||
ALTER TABLE relationship_type DROP COLUMN prefix_match;
|
||||
ALTER TABLE relationship_type ALTER COLUMN rt_isgroup RENAME TO rt_togroup;
|
||||
ALTER TABLE relationship_type ADD COLUMN rt_fromgroup BOOLEAN;
|
||||
|
||||
SELECT new_db_revision(1,1,7, 'July' );
|
||||
COMMIT;
|
||||
ROLLBACK;
|
||||
|
||||
@ -85,10 +85,9 @@ GRANT SELECT,INSERT,UPDATE,DELETE ON collection TO general;
|
||||
CREATE TABLE relationship_type (
|
||||
rt_id SERIAL PRIMARY KEY,
|
||||
rt_name TEXT,
|
||||
rt_isgroup BOOLEAN,
|
||||
rt_inverse INT,
|
||||
rt_togroup BOOLEAN,
|
||||
confers TEXT DEFAULT 'RW',
|
||||
prefix_match TEXT DEFAULT ''
|
||||
rt_fromgroup BOOLEAN
|
||||
);
|
||||
|
||||
GRANT SELECT,INSERT,UPDATE,DELETE ON relationship_type TO general;
|
||||
@ -132,4 +131,4 @@ CREATE INDEX properties_dav_name_idx ON property(dav_name);
|
||||
GRANT SELECT,INSERT,UPDATE,DELETE ON property TO general;
|
||||
|
||||
|
||||
SELECT new_db_revision(1,1,6, 'June' );
|
||||
SELECT new_db_revision(1,1,7, 'July' );
|
||||
|
||||
@ -57,9 +57,9 @@ require_once("interactive-page.php");
|
||||
|
||||
$browser->AddColumn( 'rt_id', 'Id' );
|
||||
$browser->AddColumn( 'rt_name', translate('Name') );
|
||||
$browser->AddColumn( 'rt_isgroup', translate('To Group?'), '', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddColumn( 'rt_fromgroup', translate('From Group?'), '', '', "CASE WHEN rt_fromgroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddColumn( 'rt_togroup', translate('To Group?'), '', '', "CASE WHEN rt_togroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddColumn( 'confers', translate('Rights') );
|
||||
$browser->AddColumn( 'prefix_match', translate("Prefix") );
|
||||
$browser->AddColumn( 'action', translate("Action"), "", "", "'<a href=\"$c->base_url/relationship_types.php?action=delete&rt_id=' || rt_id || '\">".translate("Delete")."</a>'" );
|
||||
|
||||
$browser->SetJoins( 'relationship_type' );
|
||||
@ -77,24 +77,23 @@ require_once("interactive-page.php");
|
||||
array("title" => translate("Enter the name for this resource type"),
|
||||
"size" => "20") );
|
||||
|
||||
$rt_isgroup_field = new EntryField( "checkbox", "rt_isgroup",
|
||||
$rt_fromgroup_field = new EntryField( "checkbox", "rt_fromgroup",
|
||||
array("title" => translate("Is the source of this relationship a group of access rights?")) );
|
||||
|
||||
$rt_fromgroup_field = new EntryField( "checkbox", "rt_togroup",
|
||||
array("title" => translate("Is the target of this relationship a group of access rights?")) );
|
||||
|
||||
$confers_field = new EntryField( "text", "confers",
|
||||
array("title" => translate("Is this access read ('R') or Read and Write ('RW')?"),
|
||||
"size" => "5") );
|
||||
|
||||
$prefix_match_field = new EntryField( "text", "hprefix_match",
|
||||
array("title" => translate("Restrict access to prefixes matching this pattern"),
|
||||
"size" => "15") );
|
||||
|
||||
$browser->AddRow( array(
|
||||
'rt_id' => 'new',
|
||||
'rt_name' => $rt_name_field->Render(),
|
||||
'rt_link' => $rt_name_field->Render(),
|
||||
'rt_isgroup' => $rt_isgroup_field->Render(),
|
||||
'rt_fromgroup' => $rt_fromgroup_field->Render(),
|
||||
'rt_togroup' => $rt_togroup_field->Render(),
|
||||
'confers' => $confers_field->Render(),
|
||||
'prefix_match' => $prefix_match_field->Render(),
|
||||
'action' => '<input type="submit" name="submit" value="'.translate("Add").'" class="fsubmit">'
|
||||
) );
|
||||
|
||||
|
||||
@ -143,13 +143,12 @@ class RSCDSSession extends Session
|
||||
*/
|
||||
function GetRelationships () {
|
||||
$this->relationships = array();
|
||||
$sql = 'SELECT relationship.rt_id, rt_name, rt_isgroup, confers, prefix_match FROM relationship JOIN relationship_type USING (rt_id) WHERE from_user = '.$this->user_no.' UNION ';
|
||||
$sql .= 'SELECT relationship_type.rt_id, rt_name, rt_isgroup, confers, prefix_match FROM relationship JOIN relationship_type ON (relationship.rt_id = relationship_type.rt_inverse) WHERE to_user = '.$this->user_no.';';
|
||||
$sql = 'SELECT relationship.rt_id, rt_name, rt_fromgroup, rt_togroup, confers FROM relationship JOIN relationship_type USING (rt_id) WHERE from_user = '.$this->user_no;
|
||||
$qry = new PgQuery( $sql );
|
||||
if ( $qry->Exec('RSCDSSession') && $qry->rows > 0 ) {
|
||||
while( $relationship = $qry->Fetch() ) {
|
||||
$this->relationships[$relationship->rt_id] = $relationship;
|
||||
dbg_error_log( "RSCDSSession", "Relationships: %d - %s - %d - %s - %s -", $relationship->rt_id, $relationship->rt_name, $relationship->rt_isgroup, $relationship->confers, $relationship->prefix_match );
|
||||
dbg_error_log( "RSCDSSession", "Relationships: %d - %s - %d - %s - %s -", $relationship->rt_id, $relationship->rt_name, $relationship->rt_fromgroup, $relationship->rt_togroup, $relationship->confers );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,7 +90,6 @@ class RSCDSUser extends User
|
||||
$browser->AddHidden( 'user_link', "'<a href=\"$c->base_url/user.php?user_no=' || user_no || '\">' || fullname || '</a>'" );
|
||||
$browser->AddColumn( 'rt_name', translate('Relationship') );
|
||||
$browser->AddColumn( 'fullname', translate('Linked To'), 'left', '##user_link##' );
|
||||
// $browser->AddColumn( 'is_group', 'Group?', 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddHidden( 'confers' );
|
||||
$browser->AddColumn( 'email', translate('EMail') );
|
||||
if ( $ef->EditMode ) { // && $session->AllowedTo("MaintainRelationships") ) {
|
||||
@ -140,7 +139,7 @@ EOSQL;
|
||||
"_null" => $nullvalue,
|
||||
"_sql" => $sql ) );
|
||||
|
||||
$group_target = ( isset($this->roles['Group']) ? 'WHERE NOT rt_isgroup' : '' );
|
||||
$group_target = ( isset($this->roles['Group']) ? 'WHERE NOT rt_fromgroup' : '' );
|
||||
$relationship_type_selection = $ef->DataEntryField( "", "lookup", "relate_as",
|
||||
array("title" => translate("Select the type of relationship from this user"),
|
||||
"_null" => translate("--- select a relationship type ---"),
|
||||
@ -175,7 +174,7 @@ EOSQL;
|
||||
$browser->AddHidden( 'user_link', "'<a href=\"$c->base_url/user.php?user_no=' || user_no || '\">' || fullname || '</a>'" );
|
||||
$browser->AddColumn( 'fullname', translate('Linked From'), 'left', '##user_link##' );
|
||||
$browser->AddColumn( 'rt_name', translate('Relationship') );
|
||||
$browser->AddColumn( 'is_group', translate('Group?'), 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddColumn( 'to_group', translate('Group?'), 'centre', '', "CASE WHEN rt_togroup THEN 'Yes' ELSE 'No' END" );
|
||||
$browser->AddHidden( 'confers' );
|
||||
$browser->AddColumn( 'email', translate('EMail') );
|
||||
|
||||
|
||||
@ -228,5 +228,6 @@
|
||||
<item url="debian/control" uploadstatus="1" />
|
||||
<item url="inc/DOM-PHP4-Compatibility.php" uploadstatus="1" />
|
||||
<item url="inc/DOMDocumentCompatibility.php" uploadstatus="1" />
|
||||
<item url="dba/patches/1.1.7.sql" />
|
||||
</project>
|
||||
</webproject>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user