11 my( $privnums, $privnames ) = getRightDefs();
13 sub userRights( $$ ) {
14 my( $tables, $user ) = @_;
15 foreach( @{$tables->query( 'rightsName', [ $user, $user ] )} ) {
17 print " $privnames->{$rid} ($rid)\n";
21 my $dbh = connectDb();
22 my $tables = PciIds::DBQAny::new( $dbh, {
23 'rightsName' => 'SELECT rightId FROM users INNER JOIN rights ON users.id = rights.userId WHERE users.email = ? OR users.login = ? ORDER BY rightId',
24 'allrights' => 'SELECT users.id, users.login, users.email, rights.rightId FROM users INNER JOIN rights ON users.id = rights.userId ORDER BY users.login, users.email, users.id, rights.rightId',
25 'getId' => 'SELECT id FROM users WHERE email = ? OR login = ?',
26 'add' => 'INSERT INTO rights (userId, rightId) VALUES(?, ?)',
27 'del' => 'DELETE FROM rights WHERE userId = ? AND rightId = ?'
30 while( scalar @ARGV ) {
31 my $cmd = shift @ARGV;
34 foreach( @{$tables->query( 'allrights', [] )} ) {
35 my( $id, $name, $mail, $rid ) = @{$_};
36 if( $id != $lastid ) {
37 print "$mail ($id)\t$name\n";
40 print " $privnames->{$rid} ($rid)\n";
42 } elsif( $cmd =~ /^[+-]l?$/ ) {
43 my $user = shift @ARGV;
44 my $id = $tables->query( 'getId', [ $user, $user ] )->[ 0 ]->[ 0 ];
45 die "Invalid user $user\n" unless( defined $id );
46 my $right = $privnums->{shift @ARGV};
47 die "Invalid right $right\n" unless( defined $right );
48 my @params = ( $id, $right );
49 my $q = ( $cmd =~ /-/ ) ? 'del' : 'add';
50 $tables->command( $q, \@params );
51 } elsif( $cmd eq '-h' ) {
52 print "rights.pl username\t\t\tPrint user's rights\n";
53 print "rights.pl -a\t\t\t\tPrint all users and their rights\n";
54 print "rights.pl +/- user right\t\tGrant/revoke user's right\n";
57 userRights( $tables, $cmd );