X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Fdocs%2Fdesign_docs%2Frecursive_group_membership_algorithm;fp=rt%2Fdocs%2Fdesign_docs%2Frecursive_group_membership_algorithm;h=0000000000000000000000000000000000000000;hp=250b9ad0d8c9f69c0b1f00a64f93ecd12e8e67dc;hb=43a06151e47d2c59b833cbd8c26d97865ee850b6;hpb=6587f6ba7d047ddc1686c080090afe7d53365bd4 diff --git a/rt/docs/design_docs/recursive_group_membership_algorithm b/rt/docs/design_docs/recursive_group_membership_algorithm deleted file mode 100644 index 250b9ad0d..000000000 --- a/rt/docs/design_docs/recursive_group_membership_algorithm +++ /dev/null @@ -1,109 +0,0 @@ -Group A has members 1, 2, 3 - - Cached members 1 is a member of A via "" - 2 is a member of A via "" - 3 is a member of A via "" - - -Group B has members A, 4, 5 - - Cached members: 4 is a member of B via "" $1 - 5 is a member of B via "" $2 - A is a member of B via "" $3 - 1 is a member of B via "$3" $4 - 2 is a member of B via "$3" $5 - 3 is a member of B via "$3" $6 - -Group C has members A, B, 6 - 6 is a member of C via "" $7 - A is a member of C via "" $8 - 1 is a member of C via $8 $9 - 2 is a member of C via $8 $10 - 3 is a member of C via $8 $11 - B is a member of C via "" $12 - 4 is a member of C via $12 $13 - 5 is a member of C via $12 $14 - A is a member of C via $12 $15 - 1 is a member of C via $15 $16 - 2 is a member of C via $15 $17 - 3 is a member of C via $15 $18 - - - -Group D has members A, C - - A is a member of D via "" $19 - 1 is a member of D via $19 $20 - 2 is a member of D via $19 $21 - 3 is a member of D via $19 $22 - C is a member of D via "" $23 - 6 is a member of D via $23 $24 - A is a member of D via $23 $25 - 1 is a member of D via $25 $26 - 2 is a member of D via $25 $27 - 3 is a member of D via $25 $28 - B is a member of D via $23 $29 - 4 is a member of D via $29 $30 - 5 is a member of D via $29 $31 - A is a member of D via $29 $32 - 1 is a member of D via $32 $33 - 2 is a member of D via $32 $34 - 3 is a member of D via $32 $35 - - - -Adding a new user, 7, to group A. - - - Add the user to group A in the groups table. - - Find all entries for group A in the cache table. - - For each entry in that list: - Add "7 is a member of $entry->top via $entry->id" - -Deleting a user, 7, from group A: - - Remove the user from group A in the groups table. - find all entries in the cache table where the principal id is user 7 and - the parent id is A. (requires a self join) - nuke them - - Alternatively: - find all entries for A in the cache table. - For each one, find the child whose id is 7. - Nuke it - - -Adding a group, B to group D. - - Add group B as a member of D in the groups table. - In the cache table: - $id = Add group B as a member of D via "" - - For each member of group B (4, 5, A): - - $sid= 4 is a member of D via $id - $sid= 5 is a member of D via $id - $sid= A is a member of D via $id - - if the member is a group itself, recurse down: - - 1 is a member of D via $sid - 2 is a member of D via $sid - 3 is a member of D via $sid - - Find all places where D is a member of $foo. - Repeat the above procedure, substituting $foo for D - and making $id D's id. - -Removing B as a member of D: - - Remove B as a member of D in the groups table. - Find all references to D in the pseudogroups table. - Find all children of D which are B: - Recurse down with the following algorithm: - If it's a user, delete it. - If it's a group, recurse through each member, - deleting its children and then deleting the - group itself.