|
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