Changeset 2256


Ignore:
Timestamp:
06/03/19 19:53:20 (5 years ago)
Author:
nanardon
Message:

Add attrbiute to add/remove user to autoFiltred group and aliases

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrForms.pm

    r2201 r2256  
    162162            autoMemberFilter 
    163163            autoFromSutype 
     164            autoInclude 
     165            autoExclude 
    164166            sutype 
    165167            services 
     
    240242            autoMemberFilter 
    241243            autoFromSutype 
     244            autoInclude 
    242245            autoExclude 
     246            autoAddEmail 
    243247            create 
    244248            createdby 
  • trunk/LATMOS-Accounts/bin/la-sql-upgrade

    r2243 r2256  
    5050 
    5151my $LA = LATMOS::Accounts->new($config, noacl => 1); 
     52 
     53$base ||= $LA->default_base_name; 
     54 
    5255my $labase = $LA->_load_base($base); 
    5356$labase->unexported(1); 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm

    r2244 r2256  
    1818our $VERSION = (q$Rev$ =~ /^Rev: (\d+) /)[0]; 
    1919 
    20 sub SCHEMA_VERSION { 32 }; 
     20sub SCHEMA_VERSION { 33 }; 
    2121 
    2222=head1 NAME 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Aliases.pm

    r1904 r2256  
    188188                label => l('User excluded'), 
    189189            }, 
     190            autoInclude => { 
     191                multiple => 1, 
     192                reference => 'user', 
     193                label => l('User included'), 
     194            }, 
     195            autoAddEmail => { 
     196                multiple => 1, 
     197                label => l('Extra email'), 
     198            }, 
    190199        } 
    191200    ) 
     
    269278 
    270279    my %email = $self->base->attributes_summary_by_object('user', 'mail'); 
    271     my %users; 
    272  
    273     my $autoex = $self->get_field('autoExclude'); 
    274     my %exclude = map { $_ => 1 } grep { $_  } (ref $autoex ? @$autoex : $autoex); 
    275  
    276     if (my $filter = $self->get_field('autoMemberFilter')) { 
    277         $users{$_} = 1 foreach( $self->base->search_objects( 
    278                 'user', 
    279                 'oalias=NULL', 
    280                 ref $filter ? @{ $filter } : $filter) 
    281         ); 
    282     } 
    283  
    284     if (my $filter = $self->get_field('autoFromSutype')) { 
    285         my @suTypeFilter = map { "sutype=$_" } (ref $filter ? @{ $filter } : $filter); 
    286         foreach my $group ($self->base->search_objects('group', @suTypeFilter)) { 
    287             foreach ($self->base->search_objects('user', 'oalias=NULL', "memberOf=$group")) { 
    288                 $users{$_} = 1; 
    289             } 
    290         } 
    291     } 
     280 
     281    my @UserList = $self->_filterToUser(); 
    292282 
    293283    my %forward = (); 
    294284 
    295     foreach my $user (keys %users) { 
    296         $exclude{$user} and next; 
     285    foreach my $user (@UserList) { 
    297286        $email{$user} or next; 
    298287        my $mail = $email{$user}->[0] or next; 
    299         $forward{$mail} = 1; 
     288        $forward{ lc($mail) } = 1; 
     289    } 
     290 
     291    my $autoAddEmail = $self->get_field('autoAddEmail'); 
     292 
     293    foreach my $mail (grep { $_ } (ref $autoAddEmail ? @$autoAddEmail : $autoAddEmail)) { 
     294        $forward{ lc($mail) } = 1; 
    300295    } 
    301296 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Group.pm

    r2175 r2256  
    151151                }, 
    152152                label => l('Automatics filters'), 
     153            }, 
     154            autoExclude => { 
     155                multiple => 1, 
     156                reference => 'user', 
     157                label => l('User excluded'), 
     158            }, 
     159            autoInclude => { 
     160                multiple => 1, 
     161                reference => 'user', 
     162                label => l('User included'), 
    153163            }, 
    154164            autoFromSutype => { 
     
    243253    ); 
    244254 
    245     my %users; 
    246  
    247     if (my $filter = $self->get_field('autoFromSutype')) { 
    248         my @suTypeFilter = map { "sutype=$_" } (ref $filter ? @{ $filter } : $filter); 
    249         foreach my $group ($self->base->search_objects('group', @suTypeFilter)) { 
    250             foreach ($self->base->search_objects('user', "memberOf=$group")) { 
    251                 $users{$_} = 1; 
    252             } 
    253         } 
    254     } 
    255  
    256     if (my $filter = $self->get_field('autoMemberFilter')) { 
    257         foreach ($self->base->search_objects( 
    258                 'user', 
    259                 'oalias=NULL', 
    260                 ref $filter ? @{ $filter } : $filter)) { 
    261             $users{$_} = 1; 
    262         } 
    263     } 
    264  
    265     my $res = $self->_set_group_members([ keys %users ]); 
     255    my @Userlist = $self->_filterToUser; 
     256 
     257    my $res = $self->_set_group_members( \@Userlist ); 
    266258 
    267259    $res; 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm

    r2236 r2256  
    897897} 
    898898 
     899sub _filterToUser { 
     900    my ($self) = @_; 
     901 
     902    if ( 
     903           !$self->get_field('autoMemberFilter') 
     904        && !$self->get_field('autoFromSutype')) { 
     905        return 0; 
     906    } 
     907    $self->base->log(LA_DEBUG, 
     908        "Populating group %s from autoMemberFilter/autoFromSutype attribute", 
     909        $self->id 
     910    ); 
     911 
     912    my $autoin = $self->get_field('autoInclude'); 
     913    my %include = map { $_ => 1 } grep { $_  } (ref $autoin ? @$autoin : $autoin); 
     914 
     915    my $autoex = $self->get_field('autoExclude'); 
     916    my %exclude = map { $_ => 1 } grep { $_  } (ref $autoex ? @$autoex : $autoex); 
     917 
     918    my %users = %include; 
     919 
     920    if (my $filter = $self->get_field('autoFromSutype')) { 
     921        my @suTypeFilter = map { "sutype=$_" } (ref $filter ? @{ $filter } : $filter); 
     922        foreach my $group ($self->base->search_objects('group', @suTypeFilter)) { 
     923            foreach ($self->base->search_objects('user', "memberOf=$group")) { 
     924                $users{$_} = 1; 
     925            } 
     926        } 
     927    } 
     928 
     929    if (my $filter = $self->get_field('autoMemberFilter')) { 
     930        foreach ($self->base->search_objects( 
     931                'user', 
     932                'oalias=NULL', 
     933                ref $filter ? @{ $filter } : $filter)) { 
     934            $users{$_} = 1; 
     935        } 
     936    } 
     937 
     938    my @Userlist = grep { ! $exclude{ $_ } } keys %users; 
     939 
     940    @Userlist 
     941} 
     942  
     943 
    899944=head2 attributes_summary_by_object($base, $attribute) 
    900945 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/upgrade.pm

    r2249 r2256  
    11991199            ver => 32, 
    12001200            recompute => 1, 
    1201         } 
     1201        }, 
     1202        { 
     1203            ver => 33, 
     1204            sql => [ 
     1205                q{ 
     1206                CREATE OR REPLACE FUNCTION public.group_sort_fields() RETURNS trigger AS 
     1207            $BODY$BEGIN 
     1208 
     1209              IF (TG_OP='INSERT') then 
     1210              IF (new.attr='managedBy' 
     1211                  OR  new.attr='managedAlsoBy' 
     1212                  OR  new.attr='member' 
     1213                  OR  new.attr='memberUID' 
     1214                  OR  new.attr='autoExclude' 
     1215                  OR  new.attr='autoInclude') THEN 
     1216              insert into group_attributes_users VALUES (new.*); 
     1217              RETURN NULL; 
     1218              END IF; 
     1219 
     1220              IF (new.attr='sutype') THEN 
     1221              insert into group_attributes_sutypes VALUES (new.*); 
     1222              RETURN NULL; 
     1223              END IF; 
     1224              end if; 
     1225 
     1226 
     1227              IF (TG_OP = 'UPDATE') THEN 
     1228              IF (new.attr='gidNumber') then 
     1229              update "group" set gidnumber = new.value::integer where 
     1230              "group".ikey = new.okey; 
     1231              RETURN NULL; 
     1232              END IF; 
     1233              END IF; 
     1234 
     1235              IF (TG_OP = 'DELETE') THEN 
     1236              IF (old.attr='exported') then 
     1237              update "group" set exported = false where "group".ikey = old.okey; 
     1238              return null; 
     1239              end if; 
     1240              else 
     1241              IF (new.attr='exported') then 
     1242              update "group" set exported = true where "group".ikey = new.okey; 
     1243              RETURN NULL; 
     1244              end if; 
     1245              END IF; 
     1246 
     1247              if (TG_OP='DELETE') THEN 
     1248              RETURN old; 
     1249              else 
     1250              RETURN new; 
     1251              end if; 
     1252              END;$BODY$ 
     1253        LANGUAGE plpgsql VOLATILE NOT LEAKPROOF 
     1254        COST 100; 
     1255                } 
     1256            ], 
     1257        }, 
    12021258    ); 
    12031259 
Note: See TracChangeset for help on using the changeset viewer.