Dela via


Bädda in en rapport med RLS

GÄLLER FÖR: Appen äger data Användaren äger data

Den här artikeln beskriver hur du bäddar in Power BI-innehåll som använder RLS i en vanlig Power BI-app som äger dataprogram.

Förutsättningar

En detaljerad förklaring av hur du konfigurerar RLS finns i Säkerhet på radnivå (RLS) med Power BI.

När du definierar dina RLS-roller bör du tänka på att DAX-uttrycket som du använder avgör om RLS-modellen är statisk eller dynamisk.

När du ska använda statisk och dynamisk säkerhet

Statisk säkerhet använder ett fast värde i DAX-filtret för att definiera varje roll. Det är enkelt att implementera men svårt att underhålla när det finns många användare eller organisationer inblandade.

Statisk säkerhet fungerar bäst för en ISV som betjänar en eller några stora kunder där varje avdelning behöver komma åt olika data.

Dynamisk säkerhet använder en DAX-funktion (username() eller userprincipalname()) för att definiera rollerna. Dynamisk säkerhet ger mer flexibilitet och gör att du kan hantera dina data med färre roller och mindre underhåll.

Statisk säkerhet

Med statiska roller skickar du rollen till Power BI när du genererar en inbäddningstoken och användaren ser data enligt den rollen. Om du vill skapa statiska säkerhetsroller anger du ett fast värde i DAX-filtret.

Du kan till exempel definiera rollen usa, östra som [Region] = "East"

Skärmbild som visar hur du definierar en statisk R L S-roll.

Anta att john@contoso.com det är en användare av din app. Du vill ge John åtkomst till data från rollen USA , östra. Om du vill bädda in en rapport för john@contoso.comgenererar du en inbäddningstoken med hjälp av rollen USA , östra. Resulterande data filtreras för [Region] = "East".

Kommentar

När du genererar inbäddningstoken måste du ange ett användarnamn, men användarnamnet kan vara valfri sträng. Statiska roller har ett fast värde som inte är beroende av ett användarnamn, så när ISV:en har fastställt användarens roll och skickar den till inbäddningstoken filtreras data enligt den rollen oavsett vilket användarnamn som skickades.

Dynamisk säkerhet

Dynamisk säkerhet använder DAX-funktionen (username() eller userprincipalname()) för att definiera rollen.

I scenariot med att användaren äger data filtrerar RLS-modellen automatiskt data baserat på den specifika användarens roller. Med appen äger data känner Power BI inte till användarnamnen för ISV-kunder, så du kan använda username() funktionen för att dynamiskt filtrera data.

Skapa en roll i Power BI Desktop med hjälp av funktionen username(). Du kan till exempel skapa en roll med namnet CountryDynamic och definiera den som [CountryRegionCode] = username()

Skärmbild som visar hur du skapar en dynamisk R L S-roll.

Anta att du vill ge användaren jane@contoso.comåtkomst till data för Frankrike. När du genererar en inbäddningstoken för jane@contoso.comskickar du strängen Frankrike som användarnamn i rollen CountryDynamic . Dina data filtreras enligt [CountryRegionCode] = Frankrike.

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "France",
            "roles": [ "CountryDynamic"],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

När du använder dynamisk säkerhet i det här scenariot behöver du bara en roll för alla regioner. Regionnamnet används som den effektiva identiteten.

Generera en inbäddningstoken

När du är redo att bädda in rapporten i din app måste du generera en inbäddningstoken. Om du vill generera en token med api:et för inbäddningstoken skickar du följande information till API:et.

  • username (required) – Om rollerna är dynamiska används användarnamnssträngen som filter. För statiska roller påverkar användarnamnet inte RLS och kan vara vilken sträng som helst. Endast ett enda användarnamn kan anges.
  • roller (krävs) – De roller som används vid tillämpning av säkerhetsregler på radnivå. Om du skickar mer än en roll bör de skickas som en strängmatris.
  • datauppsättning (krävs) – den datauppsättning som gäller för det objekt som du bäddar in.

Nu kan du bädda in rapporten i din app. Rapporten filtrerar data enligt den RLS som tillämpas.

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

Beaktanden och begränsningar

  • Beroende på konfigurationen kan du behöva utföra flera steg innan du kan generera en inbäddningstoken. Information om de olika scenarierna finns i Bädda in en rapport som använder säkerhetsfunktioner.
  • Användaren som genererar inbäddningstoken måste vara medlem eller administratör på båda arbetsytorna (datamängdens arbetsyta och rapportarbetsytan).
  • När du genererar inbäddningstoken måste du ange ett användarnamn och en roll. Om du inte gör det inträffar en av följande händelser, beroende på om token genereras av tjänstens huvudnamn eller huvudanvändare:
    • För tjänstens huvudnamn misslyckas tokengenereringen.
    • För en huvudanvändare lyckas tokengenereringen men data filtreras inte (alla data returneras).

Fler frågor? Prova Power BI Community.