Skip to content

Commit b425799

Browse files
committed
Merge branch 'dev' of https://github.com/Varuuna/sp-dev-fx-controls-react into Varuuna-dev
2 parents 3b8d8b9 + 20bace4 commit b425799

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/controls/securityTrimmedControl/ISecurityTrimmedControlProps.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,12 @@ export interface ISecurityTrimmedControlProps {
2525
* The relative URL of the list or library. Required when you want to check permissions on remote list.
2626
*/
2727
relativeLibOrListUrl?: string;
28+
/**
29+
* Optional. Specify the name of a folder to check the user permissions against. Will be overridden if itemId is present.
30+
*/
31+
folderPath?: string;
32+
/**
33+
* Optional. Specify the ID of the item to check the user permissions against. Takes precedence over folder.
34+
*/
35+
itemId?: number;
2836
}

src/controls/securityTrimmedControl/SecurityTrimmedControl.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
2828
public componentDidUpdate(prevProps: ISecurityTrimmedControlProps, prevState: ISecurityTrimmedControlState): void {
2929
// Check permissions only if necessary
3030
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) {
3436
this.checkPermissions();
3537
}
3638
}
@@ -113,7 +115,7 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
113115
const { context, remoteSiteUrl, relativeLibOrListUrl, permissions } = this.props;
114116
// Check if all properties are provided
115117
if (remoteSiteUrl && relativeLibOrListUrl && permissions) {
116-
const apiUrl = `${remoteSiteUrl}/_api/web/GetList(@listUrl)/EffectiveBasePermissions?@listUrl='${encodeURIComponent(relativeLibOrListUrl)}'`;
118+
const apiUrl = this.getUrlByResource();
117119
const result = await context.spHttpClient.get(apiUrl, SPHttpClient.configurations.v1).then(data => data.json());
118120
// Check if a result was retrieved
119121
if (result) {
@@ -148,6 +150,28 @@ export class SecurityTrimmedControl extends React.Component<ISecurityTrimmedCont
148150
}
149151
}
150152

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+
151175
/**
152176
* Default React render method
153177
*/

0 commit comments

Comments
 (0)