17
17
use APP \facades \Repo ;
18
18
use Carbon \Carbon ;
19
19
use Core ;
20
+ use Illuminate \Auth \Access \AuthorizationException ;
20
21
use Illuminate \Http \JsonResponse ;
21
22
use Illuminate \Http \Request ;
22
23
use Illuminate \Http \Response ;
28
29
use PKP \invitation \invitations \userRoleAssignment \resources \UserRoleAssignmentInviteResource ;
29
30
use PKP \invitation \invitations \userRoleAssignment \UserRoleAssignmentInvite ;
30
31
use PKP \security \authorization \AnonymousUserPolicy ;
32
+ use PKP \security \authorization \AuthorizationPolicy ;
31
33
use PKP \security \authorization \UserRequiredPolicy ;
32
34
use PKP \userGroup \relationships \enums \UserUserGroupMastheadStatus ;
33
35
use PKPRequest ;
@@ -46,13 +48,24 @@ public function authorize(PKPBaseController $controller, PKPRequest $request, ar
46
48
{
47
49
$ this ->invitation ->changeInvitationUserIdUsingUserEmail ();
48
50
51
+ $ loggedInUser = $ request ->getUser ();
52
+
49
53
$ user = $ this ->invitation ->getExistingUser ();
50
54
if (!isset ($ user )) {
51
55
$ controller ->addPolicy (new AnonymousUserPolicy ($ request ));
52
56
} else {
53
- // Register the user object in the session
54
- $ reason = null ;
55
- Validation::registerUserSession ($ user , $ reason );
57
+ // if there is noone logged-in, the user that the invitation is for, can login automatically
58
+ if (!isset ($ loggedInUser )) {
59
+ // Register the user object in the session
60
+ $ reason = null ;
61
+ Validation::registerUserSession ($ user , $ reason );
62
+ }
63
+
64
+ // if there is a logged-in user and the user is not the invitation's user, then the user should not be allowed
65
+ // to perform the action
66
+ if (isset ($ loggedInUser ) && ($ loggedInUser ->getId () != $ user ->getId ())) {
67
+ $ controller ->addPolicy (new AuthorizationPolicy ());
68
+ }
56
69
57
70
$ controller ->addPolicy (new UserRequiredPolicy ($ request ));
58
71
}
0 commit comments