]> mj.ucw.cz Git - pciids.git/blob - scripts/rights.pl
Remove useless directories
[pciids.git] / scripts / rights.pl
1 #!/usr/bin/perl
2
3 use strict;
4 BEGIN {
5         unshift @INC, ".";
6 }
7 use PciIds::Db;
8 use PciIds::DBQAny;
9 use PciIds::Users;
10
11 my( $privnums, $privnames ) = getRightDefs();
12
13 sub userRights( $$ ) {
14         my( $tables, $user ) = @_;
15         foreach( @{$tables->query( 'rightsName', [ $user, $user ] )} ) {
16                 my( $rid ) = @{$_};
17                 print "  $privnames->{$rid} ($rid)\n";
18         }
19 }
20
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 = ?'
28 });
29
30 while( scalar @ARGV ) {
31         my $cmd = shift @ARGV;
32         if( $cmd eq '-a' ) {
33                 my $lastid = undef;
34                 foreach( @{$tables->query( 'allrights', [] )} ) {
35                         my( $id, $name, $mail, $rid ) = @{$_};
36                         if( $id != $lastid ) {
37                                 print "$mail ($id)\t$name\n";
38                                 $lastid = $id;
39                         }
40                         print "  $privnames->{$rid} ($rid)\n";
41                 }
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";
55         } else {
56                 print "$cmd\n";
57                 userRights( $tables, $cmd );
58         }
59 }
60 $dbh->commit();
61 $dbh->disconnect();