In this article, let us see whether the logged in user (or any user) belongs to a particular Office 365 Group member/owner or not. The below class is self-explanatory.
GraphDataProvider.ts
//Import the necessary modules.
import { WebPartContext } from "@microsoft/sp-webpart-base";
import validator from 'validator';
import IGraphDataProvider from "./IGraphDataProvider";
import customLogger from '../../../common/services/CustomLogger';
export class GraphDataProvider implements IGraphDataProvider {
public context: WebPartContext;
public setup(context: WebPartContext): void {
this.context = context;
}
public isMemberOfOffice365Group = async (groupId: string, userPrinciple: string): Promise<boolean> => {
try {
let isMember = false;
if (validator.isUUID(groupId)) {
let membersAndOwners = await this.getMembersOfGroup(groupId);
membersAndOwners = membersAndOwners.map(user => { return user.toLowerCase() })
isMember = membersAndOwners.indexOf(userPrinciple.toLowerCase()) != -1 ? true : false;
}
else {
isMember = groupId.toLowerCase() == userPrinciple.toLowerCase() ? true : false;
}
return isMember;
} catch (error) {
return false;
}
}
private getMembersOfGroup = async (groupID: string): Promise<string[]> => {
try {
let membersAndOwners: string[] = [];
let client = await this.context.msGraphClientFactory.getClient();
let groupmembers = await client.api(`/groups/${groupID}`).expand('members').get();
let groupowners = await client.api(`/groups/${groupID}`).expand('owners').get();
if (groupmembers.members) {
groupmembers.members.forEach(member => {
membersAndOwners.push(member.userPrincipalName);
})
}
if (groupowners.owners) {
groupowners.owners.forEach(owner => {
membersAndOwners.push(owner.userPrincipalName);
})
}
return membersAndOwners;
}
catch (error) {
return null;
}
}
}
const graphDataProvider = new GraphDataProvider();
export default graphDataProvider;
IGraphDataProvider.ts
export default interface IGraphDataProvider {
isMemberOfOffice365Group (groupId: string, userPrinciple: string): Promise<boolean> ;
}
And on the Consumption Component,
import graphDataProvider from '../../services/GraphDataProvider';
let isMember = await graphDataProvider.isMemberOfOffice365Group(Group, currentUserPrinciple)
Happy Coding
Sathish Nadarajan
Leave a comment