|
37 | 37 | <syntaxId>xwiki/2.1</syntaxId> |
38 | 38 | <hidden>true</hidden> |
39 | 39 | <content>{{velocity}} |
| 40 | +#set($isActionAllowed = false) |
40 | 41 | #if ("$!request.user" != "") |
41 | 42 | #if ($request.user.contains(".")) |
42 | 43 | #set ($targetUser = $request.user) |
|
47 | 48 | #if ("$!request.target" == 'wiki') |
48 | 49 | #set ($targetDoc = $xwiki.getDocument($services.model.createDocumentReference('', ['XWiki', 'Notifications', 'Code'], 'NotificationAdministration'))) |
49 | 50 | #set ($targetRef = $services.wiki.getCurrentWikiReference()) |
| 51 | + #set($isActionAllowed = $hasAdmin) |
50 | 52 | #elseif ("$!request.target" == 'user') |
51 | 53 | #set ($targetDoc = $xwiki.getDocument($targetUser)) |
52 | | - #set ($targetRef = $targetUser) |
| 54 | + #set ($targetRef = $services.model.resolveDocument($targetUser)) |
| 55 | + #set($isActionAllowed = ($services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef))) |
53 | 56 | #end |
54 | 57 | #if ("$!request.action" == "" && $request.method.equalsIgnoreCase('get')) |
55 | 58 | This is a technical page for Notifications macro. |
56 | 59 | #elseif (!$services.csrf.isTokenValid($request.csrf)) |
57 | 60 | #set ($discard = $response.sendError(401, $services.localization.render('notifications.settings.error.badCSRF'))) |
58 | | -#elseif ("$!request.target" == 'wiki' && !$hasAdmin) |
| 61 | +#elseif (!$isActionAllowed) |
59 | 62 | #set ($discard = $response.sendError(401)) |
60 | 63 | #elseif ("$!request.action" == "" || "$!request.target" == "" || ("$!request.target" == 'user' && "$!request.user" == "")) |
61 | 64 | #set ($discard = $response.sendError(400, $services.localization.render('notifications.settings.error.badParameters'))) |
|
0 commit comments