Line 0
Link Here
|
|
|
1 |
package Koha::Auth; |
2 |
|
3 |
use Modern::Perl; |
4 |
|
5 |
use C4::Auth qw//; |
6 |
use C4::Context qw//; |
7 |
|
8 |
=head2 authenticate |
9 |
|
10 |
my $user = Koha::Auth->authenticate({ |
11 |
sessionID => $sessionID, |
12 |
}); |
13 |
|
14 |
Verifies that this user has an authenticated Koha session |
15 |
|
16 |
=cut |
17 |
|
18 |
sub authenticate { |
19 |
my ($class,$args) = @_; |
20 |
my ($auth_user,$auth_session); |
21 |
my $sessionID = $args->{sessionID}; |
22 |
if ($sessionID){ |
23 |
my $flags; |
24 |
my ( $return, $session, $more_info) = C4::Auth::check_cookie_auth($sessionID,$flags, |
25 |
{ remote_addr => $ENV{REMOTE_ADDR}, skip_version_check => 1 } |
26 |
); |
27 |
if ($return && $return eq 'ok' && $session){ |
28 |
my $userid = $session->param('id'); |
29 |
if ( $userid ){ |
30 |
my $patron = Koha::Patrons->find({ userid => $userid }); |
31 |
if ($patron){ |
32 |
$auth_user = $patron; |
33 |
$auth_session = $session; |
34 |
} |
35 |
} |
36 |
} |
37 |
} |
38 |
return ($auth_user,$auth_session); |
39 |
} |
40 |
|
41 |
=head2 authorize |
42 |
|
43 |
my $flags = Koha::Auth->authorize({ |
44 |
session => $session, |
45 |
flagsrequired => { self_check => 'self_checkout_module' }, |
46 |
}); |
47 |
|
48 |
=cut |
49 |
|
50 |
sub authorize { |
51 |
my ($class,$args) = @_; |
52 |
my $flags; |
53 |
my $session = $args->{session}; |
54 |
my $flagsrequired = $args->{flagsrequired}; |
55 |
if ($session && $flagsrequired){ |
56 |
my $userid = $session->param('id'); |
57 |
if ($userid){ |
58 |
$flags = C4::Auth::haspermission($userid,$flagsrequired); |
59 |
} |
60 |
} |
61 |
return $flags; |
62 |
} |
63 |
|
64 |
sub get_authz_from_flags { |
65 |
my ($args) = @_; |
66 |
my $flags = $args->{flags}; |
67 |
my $authz; |
68 |
|
69 |
#FIXME: Replace using BZ 31389 |
70 |
#FIXME: This contains a lot of copy/paste from C4::Auth |
71 |
my $all_perms = C4::Auth::get_all_subpermissions(); |
72 |
|
73 |
if ($flags){ |
74 |
if ( $flags->{superlibrarian} == 1 ){ |
75 |
#NOTE: These are similar but slightly different to @flagroots... |
76 |
my @perms = qw/ |
77 |
circulate |
78 |
catalogue |
79 |
parameters |
80 |
borrowers |
81 |
permissions |
82 |
reserveforothers |
83 |
editcatalogue |
84 |
updatecharges |
85 |
acquisition |
86 |
tools |
87 |
editauthorities |
88 |
serials |
89 |
reports |
90 |
staffaccess |
91 |
plugins |
92 |
coursereserves |
93 |
clubs |
94 |
ill |
95 |
stockrotation |
96 |
problem_reports |
97 |
/; |
98 |
foreach my $perm (@perms){ |
99 |
$authz->{ "CAN_user_${perm}" } = 1; |
100 |
} |
101 |
foreach my $module ( keys %$all_perms ) { |
102 |
foreach my $subperm ( keys %{ $all_perms->{$module} } ) { |
103 |
$authz->{ "CAN_user_${module}_${subperm}" } = 1; |
104 |
} |
105 |
} |
106 |
} |
107 |
else { |
108 |
foreach my $module ( keys %$all_perms ) { |
109 |
if ( defined($flags->{$module}) && $flags->{$module} == 1 ) { |
110 |
foreach my $subperm ( keys %{ $all_perms->{$module} } ) { |
111 |
$authz->{ "CAN_user_${module}_${subperm}" } = 1; |
112 |
} |
113 |
} elsif ( ref( $flags->{$module} ) ) { |
114 |
foreach my $subperm ( keys %{ $flags->{$module} } ) { |
115 |
$authz->{ "CAN_user_${module}_${subperm}" } = 1; |
116 |
} |
117 |
} |
118 |
} |
119 |
foreach my $module ( keys %$flags ) { |
120 |
if ( $flags->{$module} == 1 or ref( $flags->{$module} ) ) { |
121 |
$authz->{ "CAN_user_$module" } = 1; |
122 |
} |
123 |
} |
124 |
} |
125 |
} |
126 |
|
127 |
return $authz; |
128 |
} |
129 |
|
130 |
1; |