En gruppes medlemmer i en Power App
En personvælger, der kun viser medlemmerne af én gruppe i Entra ID, og knapper, der kun vises for gruppens medlemmer, med Office 365 Groups-connectoren. Og hvorfor det sidste ikke er en adgangskontrol.
To ting, der ligner hinanden: en personvælger, hvor der kun kan vælges blandt medlemmerne af én gruppe, og dele af appen, der kun vises for gruppens medlemmer. Begge kan klares med Office 365 Groups-connectoren, som er en standardconnector (Microsoft). Metoden til personvælgeren er fra learntoilluminate.com, “Use SharePoint Group to Filter Person in PowerApps” (2021). Gruppen dér er trods titlen en gruppe i Entra ID, ikke en SharePoint-gruppe.
Gruppens id er objekt-id’et i Entra ID. Det står på gruppens side i Entra admin center.
En personvælger med kun gruppens medlemmer#
En combobox i formularen til en personkolonne, her Tildelt:
Items:
Office365Groups.ListGroupMembers("<gruppens id>", {'$top': 999}).value
DefaultSelectedItems:
If(
!IsBlank(ThisItem.Tildelt.Email),
Office365Users.UserProfileV2(ThisItem.Tildelt.Email)
)
I datakortets Update skal comboboxens valg laves om til den post, en personkolonne i SharePoint vil have:
{
Claims: "i:0#.f|membership|" & Lower(DataCardValue1.Selected.mail),
DisplayName: DataCardValue1.Selected.displayName,
Email: DataCardValue1.Selected.mail,
Department: "",
JobTitle: "",
Picture: ""
}
DataCardValue1 er comboboxen. ListGroupMembers giver 100 medlemmer som standard og højst 999 med $top (Microsoft). Med flere skal der bladres med @odata.nextLink, og det gør en combobox ikke af sig selv. Formlerne er ikke kørt. Hvordan en kolonne med flere personer håndteres, står i Saml personerne fra et personfelt med flere værdier i Power Apps.
Vis noget kun for gruppens medlemmer#
Medlemskabet slås op én gang, når appen starter, og gemmes i en variabel. I App.OnStart:
Set(varMitId, Office365Users.MyProfileV2().id);
Set(
varErMedlem,
!IsBlank(
LookUp(
Office365Groups.ListGroupMembers("<gruppens id>", {'$top': 999}).value,
id = varMitId
)
)
);
Og på knappen eller skærmen: Visible: varErMedlem. Opslaget sammenligner objekt-id’er, ikke e-mail, fordi mail og brugernavnet ikke altid er det samme. Ikke kørt.
Det er ikke en adgangskontrol#
At en knap er skjult, betyder ikke, at data er beskyttet. Den, der kan se data gennem appen, har rettighederne i datakilden og kan åbne listen uden om appen. Microsoft skriver det om SQL Server, men det gælder alle datakilder: “You can’t rely on the security of data through filtering or other client-side operations to be secure” (Microsoft). Resten står i Sikkerheden i en Power App sidder i datakilden.
Skal kun gruppens medlemmer kunne rette, er det listens rettigheder, der skal sættes til gruppen. Så er varErMedlem bare det, der gør appen pæn.
Det der driller#
- Kun direkte medlemmer.
ListGroupMemberser ikke beskrevet som transitiv, så medlemmer af en gruppe i gruppen kommer ikke med. Graph kan svare på indlejret medlemskab medcheckMemberGroups(op til 20 grupper pr. kald) ellertransitiveMemberOf(Microsoft), men Office 365 Groups-connectorens Send an HTTP request V2 tager kun adresser under/groups, og Office 365 Users’ HTTP-handling tager kun bestemte adresser under/meog/users, ikkememberOf. Om/groups/<id>/transitiveMembersbliver taget imod under/groups, har jeg ikke efterprøvet. Ellers kræver det HTTP-handlingen i et flow, som er Premium. - Sikkerhedsgrupper. Microsoft siger ikke, om
ListGroupMembersvirker på en ren sikkerhedsgruppe eller kun på Microsoft 365-grupper. Connectoren har kendte fejl med mailaktiverede sikkerhedsgrupper, og grupper med isAssignableToRole understøttes ikke (samme side). Prøv med den gruppe, der skal bruges. - Grænsen for kald er 100 pr. 60 sekunder pr. forbindelse. Derfor én gang i
OnStartog ikke i en galleri-formel, der kører for hver række. - Gæster står i gruppen med et brugernavn med
#EXT#. Hvadmailer for dem, og omClaimsså skal bygges af brugernavnet, har jeg ikke efterprøvet.