Tällä kertaa ihmetellään Dataversen käyttöoikeuksia. Tehdään se seuraavan esimerkin avulla.

Meillä on kaksi ryhmää käyttäjiä (A ja B) ja Dataversessä yksi tietoja sisältävä taulu.

  • Ryhmä A:n jäsen voi luoda uusia rivejä, näkee kaikki rivit ja voi muokata kaikkea
  • Ryhmä B:n jäsen voi luoda uusia rivejä, mutta voi nähdä ja muokata ainoastaan ryhmä B:n jäsenten luomia rivejä

Miten toteutamme tämän? Siten että kaikki toimii lisäämällä vain uusi käyttäjä oikeaan AAD-ryhmään. Emme halua ylläpitää käyttäjiä manuaalisesti Dataversessä.

Rivin omistaa liiketoimintayksikkö (Business Unit, BU)

Ratkaistaan ongelma ensin liiketoimintayksiköiden (BU) avulla. Lyhyesti.

  • Ryhmiä A ja B vastaa AAD:ssa omat ryhmät
  • Luodaan Dataverseen A:lle ja B:lle omat BU:t
  • Luodaan Dataverseen tiimit, jotka perustuvat AAD ryhmiin (A ja B). Tiimit kuuluvat luotuiin BU:huin
  • Luodaan tarvittavat käyttöoikeusroolit (security role). A näkee kaiken. B:n oikeudet rajoitetaan BU-tasolle.

Kuvana tämä näyttää tältä.

Toteutus

Luodaan juuri (root) BU:n alle uudet BU:t ryhmille A ja B.

Luodaan AAD-pohjaiset tiimit ja sidotaan ne luotuihin BU:hin.

Luodaan käyttöoikeusroolit (A näkee org tason, B BU tason). Liitetään ne tiimeihin.

Toimiiko tämä?

Testataan toimiikio. Luodaan yksinkertainen sovellus ja jaetaan se käyttäjille.

Käyttäjä ryhmästä A avaa sovelluksen ja luo uuden rivin. Se näkyy, kuten pitääkin.

Seuraavaksi sovelluksen avaa käyttäjä ryhmästä B. Hän ei näe ensimmäisen käyttäjän luomaa riviä (hyvä). Mutta kun hän luo itse uuden rivin, hän ei näe sitäkään (huono).

Huomaamme, että luodut rivit menevät käyttäjään sidotun BU:n omistukseen.

Ja se on oletuksena juuri BU.

Voimme vaihtaa käyttäjän BU:n käyttöliittymästä, jolloin käyttäjän luomat rivit siirtyvät uuden BU:n omistukseen ja kaikki toimii. Mutta emme halua tehdä tätä käsin.

Uuden käyttäjän BU:n korjaaminen flow’lla

Luodaan flow, joka käynnnistyy kun Dataversen Users-tauluun luodaan uusi rivi. Compose-toiminnolla luodaan taulukko, jossa on ryhmiä A ja B vastaavat AAD ryhmät ja BU:t. Sitten vain tarkistetaan, mihin AAD-ryhmään käyttäjä kuuluu ja vaihdetaan hänet ko ryhmää vastaavaan BU:hun.

Mutta mitä tapahtuu käyttäjän avatessa ensimmäistä kertaa sovelluksen? Ehtiikö flow vaihtamaan BU:n riittävän ajoissa?

Ei.

Kuvassa käyttäjä on avannut sovelluksen ensimmäistä kertaa. Ja luonut kaksi riviä. Näemme että käyttäjän BU on vaihtunut oikein (BU Group B), mutta ensimmäinen rivi on jäänyt juuri BU:n omistukseen.

Mikä pahinta, käyttäjä ei itse näe ensimmäistä luomaansa riviä. Sitä varten tulee juuri BU:lle antaa käyttöoikeusryhmä, joka sallii omien rivien näkemisen. Näin ne eivät häviä.

Mutta pitäähän tämä korjata. Harmiksmme flow’ssa ei voi vaihtaa rivin omistamaa BU:ta. Miten tilanne sitten korjataan?

Lisätään käyttäjän BU:n korjaamisen perään tauko. Esimerkiksi seuraavaan yöhön asti. Tämän jälkeen tarkistetaan ehtikö käyttäjä luoda rivejä juuri BU:n omistukseen. Mikäli ehti, vaihdetaan käyttäjän BU takaisin juuri BU:ksi ja heti perään takaisin oikeaksi. Näin alusta siirtää kaikki käyttäjän luomat rivit oikean BU:n omistukseen.

BU lähestyminen menee vaikeaksi, mikäli käyttäjät voivat siirtyä BU:den välillä. Eli AAD ryhmästä toiseen. Tällöin he saavat uutta ryhmää vastaavan käyttöoikeusroolin, mutta heidän BU ei muutu. Käytännössä käyttäjän siirtyessä AAD ryhmästä A ryhmään B, hän näkeekin ainoastaan ryhmän A luomat rivit…

Rivin omistaa tiimi

Voimme lähestyä ongelmaa myös puhtaasti tiimien kautta. Unohdetaan BU:t. Nyt rivin omistaa tiimi. Ryhmä A:ta vastaava käyttöoikeusrooli antaa oikeudet organisaatiotasolla (pääsee kaikkiin riveihin) ja Ryhmä B saa vastaavasti ainoastaan käyttäjä (user) -tason oikeudet. Näin pääsemme haluttuun lopputulokseen.

Ongelma lähetymisessä on se, että uudet rivit tulee flow’lla asettaa aina oikean tiimin omistukseen. Tämä on hieman hölmöä, mikäli rivejä luodaan paljon. Myös oikean omistavan tiimin valinta voi olla hankalaa. Käyttäjä kun voi kuulua useaan tiimiin

Yhteenveto

Mikäli emme halua luvittaa Dataversen käyttäjiä manuaalisesti, voi yksinkertaiseltakin kuulostavan käyttöoikeusmallin toteuttaminen osoittautua hankalaksi.

Ja mikäli samassa ympäristössä on myös muita käyttäjiä, tauluja, tiimejä BU:ta sekä käyttöoikeusrooleja, voi kokonaisuudesta tulla nopeasti sekava soppa.