Sdílet prostřednictvím


Vložení sestavy pomocí RLS

PLATÍ PRO: Aplikace vlastní data , která uživatel vlastní.

Tento článek vysvětluje, jak vložit obsah Power BI, který používá zabezpečení na úrovni řádků (RLS) do standardní aplikace Power BI, která vlastní datovou aplikaci.

Požadavky

Podrobné vysvětlení nastavení zabezpečení na úrovni řádků (RLS ) v Power BI.

Při definování rolí zabezpečení na úrovni řádků mějte na paměti, že výraz DAX, který použijete, určuje, jestli je model RLS statický nebo dynamický.

Kdy použít statické a dynamické zabezpečení

Statické zabezpečení používá pevnou hodnotu ve filtru DAX k definování jednotlivých rolí. Implementace je jednoduchá, ale obtížně se udržuje, pokud je zapojeno mnoho uživatelů nebo organizací.

Statické zabezpečení je nejvhodnější pro výrobce softwaru, který obsluhuje jednoho nebo několik velkých zákazníků, kde každé oddělení potřebuje přístup k různým datům.

Dynamické zabezpečení používá k definování rolí funkci DAX (username() nebo userprincipalname()). Dynamické zabezpečení poskytuje větší flexibilitu a umožňuje spravovat data pomocí menšího počtu rolí a menší údržby.

Statické zabezpečení

Se statickými rolemi předáte roli Do Power BI při vygenerování tokenu pro vložení a uživatel uvidí data podle této role. Pokud chcete vytvořit statické role zabezpečení, zadejte do filtru DAX pevnou hodnotu.

Můžete například definovat roli východní USA jako [Region] = "East"

Snímek obrazovky znázorňující, jak definovat statickou roli R L S

Řekněme, že john@contoso.com je uživatel vaší aplikace. Chcete johnovi udělit přístup k datům z role Východní USA . Pokud chcete vložit sestavu pro john@contoso.com, vygenerujte token pro vložení pomocí role Východní USA . Výsledná data jsou filtrována pro [Region] = "East".

Poznámka:

Když vygenerujete token pro vložení, musíte zadat uživatelské jméno, ale uživatelské jméno může být libovolný řetězec. Statické role mají pevnou hodnotu, která není závislá na uživatelském jménu, takže jakmile nezávislý výrobce softwaru určí roli uživatele a předá ji tokenu pro vložení, data se filtrují podle této role bez ohledu na to, jaké uživatelské jméno bylo předáno.

Dynamické zabezpečení

Dynamické zabezpečení používá k definování role funkci DAX (username() nebo userprincipalname()).

V případě, že uživatel vlastní data , model RLS automaticky filtruje data na základě rolí konkrétního uživatele. V případě, že aplikace vlastní data, Power BI nezná uživatelská jména zákazníků nezávislých výrobců softwaru, takže funkci můžete použít username() k dynamickému filtrování dat.

Vytvořte v Power BI Desktopu roli pomocí funkce username(). Můžete například vytvořit roli s názvem CountryDynamic a definovat ji jako [CountryRegionCode] = username()

Snímek obrazovky znázorňující, jak vytvořit dynamickou roli R L S

Řekněme, jane@contoso.comže chcete uživateli udělit přístup k datům pro Francii. Když vygenerujete token jane@contoso.compro vložení, předáte řetězec Francie jako uživatelské jméno v roli CountryDynamic . Vaše data se filtrují podle hodnoty [CountryRegionCode] = Francie.

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

Při použití dynamického zabezpečení v tomto scénáři potřebujete jenom jednu roli pro všechny oblasti. Název oblasti se používá jako efektivní identita.

Vygenerování tokenu pro vložení

Až budete připraveni vložit sestavu do aplikace, musíte vygenerovat token pro vložení. Pokud chcete vygenerovat token pomocí rozhraní API pro vložení tokenu, předejte do rozhraní API následující informace.

  • username (required) – Pokud jsou role dynamické, použije se jako filtr řetězec uživatelského jména . U statických rolí uživatelské jméno nemá vliv na zabezpečení na úrovni řádků a může to být vůbec jakýkoli řetězec. Je možné uvést pouze jedno uživatelské jméno.
  • role (povinné) – role používané při použití pravidel zabezpečení na úrovni řádků. Pokud předáte více rolí, měly by být předány jako pole řetězců.
  • datová sada (povinné) – datová sada, která se vztahuje na položku, kterou vkládáte.

Sestavu teď můžete vložit do aplikace. Sestava filtruje data podle použitého zabezpečení na úrovni řádků.

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;
    }

Úvahy a omezení

  • V závislosti na nastavení možná budete muset před vygenerováním tokenu pro vložení provést několik kroků. Informace o různých scénářích najdete v tématu Vložení sestavy, která používá funkce zabezpečení.
  • Uživatel, který vygeneruje token pro vložení, musí být členem nebo správcem v obou pracovních prostorech (pracovní prostor datové sady i pracovního prostoru sestavy).
  • Při generování tokenu pro vložení musíte zadat uživatelské jméno a roli. Pokud ne, dojde k jedné z následujících událostí v závislosti na tom, jestli se token generuje instančním objektem nebo hlavním uživatelem:
    • V případě instančního objektu se generování tokenu nezdaří.
    • Pro hlavního uživatele bude generování tokenů úspěšné, ale data se nefiltrují (všechna data se vrátí).

Další otázky? Zkuste Komunita Power BI.