@@ -28,9 +28,11 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
28
28
public componentDidUpdate ( prevProps : ISecurityTrimmedControlProps , prevState : ISecurityTrimmedControlState ) : void {
29
29
// Check permissions only if necessary
30
30
if ( prevProps . level !== this . props . level ||
31
- prevProps . permissions !== this . props . permissions ||
32
- prevProps . relativeLibOrListUrl !== this . props . relativeLibOrListUrl ||
33
- prevProps . remoteSiteUrl !== this . props . remoteSiteUrl ) {
31
+ prevProps . permissions !== this . props . permissions ||
32
+ prevProps . relativeLibOrListUrl !== this . props . relativeLibOrListUrl ||
33
+ prevProps . remoteSiteUrl !== this . props . remoteSiteUrl ||
34
+ prevProps . folderPath !== this . props . folderPath ||
35
+ prevProps . itemId !== this . props . itemId ) {
34
36
this . checkPermissions ( ) ;
35
37
}
36
38
}
@@ -113,7 +115,7 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
113
115
const { context, remoteSiteUrl, relativeLibOrListUrl, permissions } = this . props ;
114
116
// Check if all properties are provided
115
117
if ( remoteSiteUrl && relativeLibOrListUrl && permissions ) {
116
- const apiUrl = ` ${ remoteSiteUrl } /_api/web/GetList(@listUrl)/EffectiveBasePermissions?@listUrl=' ${ encodeURIComponent ( relativeLibOrListUrl ) } '` ;
118
+ const apiUrl = this . getUrlByResource ( ) ;
117
119
const result = await context . spHttpClient . get ( apiUrl , SPHttpClient . configurations . v1 ) . then ( data => data . json ( ) ) ;
118
120
// Check if a result was retrieved
119
121
if ( result ) {
@@ -148,6 +150,28 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
148
150
}
149
151
}
150
152
153
+ private getUrlByResource ( ) {
154
+ const { remoteSiteUrl, relativeLibOrListUrl, folderPath, itemId } = this . props ;
155
+
156
+ // Check permission on a specific item.
157
+ if ( itemId ) {
158
+ const splitUrl = relativeLibOrListUrl . split ( '/' ) ;
159
+ var lastSegment = splitUrl . pop ( ) || splitUrl . pop ( ) ; // Trims trailing slash if it exists.
160
+
161
+ return `${ remoteSiteUrl } /_api/web/Lists/GetByTitle(@listTitle)/items(@itemId)/EffectiveBasePermissions?@listTitle='${ encodeURIComponent ( lastSegment ) } '&@itemId='${ itemId } '` ;
162
+ }
163
+ // Check permission on a specific folder.
164
+ else if ( folderPath ) {
165
+ const folderByServerRelativeUrl : string = `${ encodeURIComponent ( relativeLibOrListUrl ) } /${ encodeURIComponent ( folderPath ) } ` ;
166
+
167
+ return `${ remoteSiteUrl } /_api/web/GetFolderByServerRelativeUrl(@folderByServerRelativeUrl)/ListItemAllFields/EffectiveBasePermissions?@folderByServerRelativeUrl='${ folderByServerRelativeUrl } '` ;
168
+ }
169
+ // Check permission on the list or library.
170
+ else {
171
+ return `${ remoteSiteUrl } /_api/web/GetList(@listUrl)/EffectiveBasePermissions?@listUrl='${ encodeURIComponent ( relativeLibOrListUrl ) } '` ;
172
+ }
173
+ }
174
+
151
175
/**
152
176
* Default React render method
153
177
*/
0 commit comments