Working With: Sharing - SharePoint/PnP-JS-Core GitHub Wiki

Note: This API is still considered "beta" meaning it may change and some behaviors may differ across tenants by version. It is also supported only in SharePoint Online.

One of the newer abilities in SharePoint is the ability to share webs, files, or folders with both internal and external folks. These capabilities were added to sp-pnp-js in the 2.0.3 release. It is important to remember that these settings are managed at the tenant level and override anything you may supply as an argument to these methods. If you receive an InvalidOperationException when using these methods please check your tenant sharing settings to ensure sharing is not blocked before submitting an issue.

getShareLink

Applies to: Item, Folder, File

Creates a sharing link for the given resource with an optional expiration.

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/folder1").getShareLink(SharingLinkKind.AnonymousView).then(result: ShareLinkResponse => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/folder1").getShareLink(SharingLinkKind.AnonymousView, Util.dateAdd(new Date(), "day", 5)).then(result: ShareLinkResponse => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

shareWith

Applies to: Item, Folder, File, Web

Shares the given resource with the specified permissions (View or Edit) and optionally sends an email to the users. You can supply a single string for the loginnames parameter or an array of loginnames. The folder method takes an optional parameter "shareEverything" which determines if the shared permissions are pushed down to all items in the folder, even those with unique permissions.

pnp.sp.web.shareWith("i:0#.f|membership|[email protected]").then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.shareWith("i:0#.f|membership|[email protected]", SharingRole.Edit).then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/folder1").shareWith("i:0#.f|membership|[email protected]").then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").shareWith("i:0#.f|membership|[email protected]", SharingRole.Edit, true, true).then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFileByServerRelativeUrl("/sites/dev/Shared Documents/test.txt").shareWith("i:0#.f|membership|[email protected]").then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFileByServerRelativeUrl("/sites/dev/Shared Documents/test.txt").shareWith("i:0#.f|membership|[email protected]", SharingRole.Edit).then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

shareObject & shareObjectRaw

Applies to: Web

Allows you to share any shareable object in a web by providing the appropriate parameters. These two methods differ in that shareObject will try and fix up your query based on the supplied parameters where shareObjectRaw will send your supplied json object directly to the server. The later method is provided for the greatest amount of flexibility.

pnp.sp.web.shareObject("https://mysite.sharepoint.com/sites/dev/Docs/test.txt", "i:0#.f|membership|[email protected]", SharingRole.View).then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

pnp.sp.web.shareObjectRaw({
    url: "https://mysite.sharepoint.com/sites/dev/Docs/test.txt",
    peoplePickerInput: [{ Key: "i:0#.f|membership|[email protected]" }],
    roleValue: "role: 1973741327",
    groupId: 0,
    propagateAcl: false,
    sendEmail: true,
    includeAnonymousLinkInEmail: false,
    emailSubject: "subject",
    emailBody: "body",
    useSimplifiedRoles: true,
});

unshareObject

Applies to: Web

pnp.sp.web.unshareObject("https://mysite.sharepoint.com/sites/dev/Docs/test.txt").then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

checkSharingPermissions

Applies to: Item, Folder, File

Checks Permissions on the list of Users and returns back role the users have on the Item.

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").checkSharingPermissions([{ alias: "i:0#.f|membership|[email protected]" }]).then((result: SharingEntityPermissions[]) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

getSharingInformation

Applies to: Item, Folder, File

Get Sharing Information.

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").getSharingInformation().then((result: SharingInformation) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

getObjectSharingSettings

Applies to: Item, Folder, File

Gets the sharing settings

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").getObjectSharingSettings().then((result: ObjectSharingSettings) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

unshare

Applies to: Item, Folder, File

Unshares a given resource

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").unshare().then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

deleteSharingLinkByKind

Applies to: Item, Folder, File

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").deleteSharingLinkByKind(SharingLinkKind.AnonymousEdit).then((result: SharingResult) => {

    console.log(result);
}).catch(e => {
    console.error(e);
});

unshareLink

Applies to: Item, Folder, File

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").unshareLink(SharingLinkKind.AnonymousEdit).then(_ => {

    console.log("done");
}).catch(e => {
    console.error(e);
});

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/Shared Documents/test").unshareLink(SharingLinkKind.AnonymousEdit, "12345").then(_ => {

    console.log("done");
}).catch(e => {
    console.error(e);
});