Rechte auf CI/Item Type begrenzen

Welcome to the POB User Group Online Community! Forums PUG DACH Rechte auf CI/Item Type begrenzen

Tagged: 

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #4943
    brubue
    Member

    Hallo zusammen,

    bei uns besteht der Wunsch, dass bestimmte Mitarbeiter nur bestimmte Configuration Items (abhängig vom CI/Item Type) bearbeiten können sollen. Also z.B. Mitarbeiter A kann an einen PC eintragen und ändern, wenn er aber einen Server ändern will, soll dies nicht möglich sein. Mit der normalen Rechteverwaltung über Rollen komme ich hier vermutlich nicht weiter oder gibt es doch eine Möglichkeit?

    Viele Grüße

    Bruno Büchele

    #4944
    Stefan Reichelt
    Participant

    Hi Bruno,

    Mit Rollen wird das wohl schwer zu handhaben (obwohl es möglich wäre – mit Datensicherheitsrollen), aber vielleicht reicht ja eine Validierung?

    In etwa so:
    – Am CI-Typ hinterlegst du einen Reiter für schreibberechtigte Nutzer
    – Condition (Update) auf Configuration Item: Ist wahr, wenn der aktuelle Benutzer [U] nicht über die entsprechende Dynamic Relation mit dem CI-Typ des CIs verbunden ist, oder der aktuelle Benutzer in der Gruppe “Admin” ist (eine Abfrage auf eine bestimmte Sicherheitsrolle wäre auch denkbar)
    – Validierung: Gib einen Fehler aus, der gleichzeitig das Update verhindert

    Kannst du damit etwas anfangen?

    Grüße,

    Stefan

    #4945
    TK
    Member

    Stefan war (wieder) schneller, hätte den gleichen Vorschlag anzubieten. Die Rechte gleich lassen und eine Condition von CI-Typ zu Gruppe hinterlegen. Dann jeder alles sehen, aber nur ändern was er soll.

    Gruß
    Tobias.

    #4952
    brubue
    Member

    Hallo Stefan,

    ich versuche deinen Vorschlag in folgender Form umzusetzen:
    Es gibt eine extra Rolle, die prinzipiell das Speichern von CI erlaubt. Dann gibt es eine Gruppe, die zu dieser Rolle gehört, weil Berechtigungen nur über Gruppen vergeben werden sollen.
    Auf dem SQL-Server habe ich eine Funktion, die mir 1 liefert, wenn der aktuelle Benutzer mitglied dieser bestimmten Rolle ist. Außerdem noch eine 2. Funktion, die mir 1 liefert, wenn auf dem CI-Typ dieser Benutzer hinterlegt ist. Die Abfragen funktionieren auf dem SQL-Server.
    Wenn ich von POB aus meine Condition [SQL:dbo.LRA_User_in_Gruppe([UID])] oder [SQL:Dbo.LRA_CI_Typ([CIType.PK])] anwende, so erhalte ich immer 0, also false. Also funktioniert meine Abfrage nicht wie erwartet.
    Außerdem muss ich noch das Problem lösen, dass das CI auch durch öffnen eines Falls geändert wird.

    Hat mir jemand zu diesen 2 Problemen noch eine Idee?

    Viele Grüße

    Bruno

    #4954
    brubue
    Member

    Hallo zusammen, nachdem ich die Lösung umgesetzt habe, hier noch eine kleine Doku dazu. Falls mir noch jemand einen Tip hat, wie ich in einem neuen Fall meine Variable @CiType.PK ohne Fehler anwenden kann, her damit.

    1. Erstellen einer Rolle, die berechtigt ist ConfigurationItems zu erstellen und zu ändern
    2. Erstellen einer Gruppe, die die zuvor erstelle Rolle beinhaltet
    3. auf dem SQL-Server folgende Funktion erstellen zur Prüfung der Gruppenzugehörigkeit

    USE [POBG6]
    GO
    /****** Object: UserDefinedFunction [dbo].[LRA_User_in_Gruppe] Script Date: 18.09.2020 12:11:29 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    — =============================================
    — Author: Bruno Büchele
    — Create date: 07.09.2020
    — Description: prüft ab, ob Benutzer ein CI mit einem bestimmten ci-Typ speichern darf
    — =============================================
    ALTER FUNCTION [dbo].[LRA_User_in_Gruppe]
    (
    — Add the parameters for the function here
    @BenutzerID nvarchar(255)

    )
    RETURNS int
    AS
    BEGIN
    return(
    SELECT count( dbo.User_Table.user_pk)
    FROM dbo.Entity_Relation RIGHT OUTER JOIN
    dbo.User_Table ON dbo.Entity_Relation.trail_pk = dbo.User_Table.user_pk FULL OUTER JOIN
    dbo.User_User_Group FULL OUTER JOIN
    dbo.User_Group ON dbo.User_User_Group.user_group_pk = dbo.User_Group.user_group_pk ON dbo.User_Table.user_pk = dbo.User_User_Group.user_pk

    WHERE (dbo.Entity_Relation.entity_id = N’USER’) AND (dbo.Entity_Relation.relation_name = N’Speicherberechtigte’) AND (dbo.User_Group.id = N’HW eingeschränkt verwalten’)
    and
    dbo.User_Table.id = @BenutzerID
    )

    END

    4. auf dem SQL-Server folgende Funktion erstellen zur Prüfung des CI-Typs
    USE [POBG6]
    GO
    /****** Object: UserDefinedFunction [dbo].[LRA_CI_Typ] Script Date: 18.09.2020 12:15:34 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    — =============================================
    — Author: Bruno Büchele
    — Create date: 07.09.2020
    — Description: prüft ab, ob Benutzer ein CI mit einem bestimmten ci-Typ speichern darf
    — =============================================
    ALTER FUNCTION [dbo].[LRA_CI_Typ]
    (
    — Add the parameters for the function here
    @CIType nvarchar(255),
    @BenutzerID nvarchar(255),
    @CiType_vorher nvarchar(255)
    )
    RETURNS int
    AS
    BEGIN

    declare @Result int;
    declare @CIType_alt int = 0;
    declare @Step_1 int;
    declare @Step_2 int;
    — prüfen, ob dieser Benutzer für Typ hinterlegt ist
    SELECT @Step_1= count( dbo.User_Table.user_pk)
    FROM dbo.Entity_Relation RIGHT OUTER JOIN
    dbo.User_Table ON dbo.Entity_Relation.trail_pk = dbo.User_Table.user_pk FULL OUTER JOIN
    dbo.User_User_Group FULL OUTER JOIN
    dbo.User_Group ON dbo.User_User_Group.user_group_pk = dbo.User_Group.user_group_pk ON dbo.User_Table.user_pk = dbo.User_User_Group.user_pk

    WHERE (dbo.Entity_Relation.entity_id = N’USER’) AND (dbo.Entity_Relation.relation_name = N’Speicherberechtigte’) AND (dbo.User_Group.id = N’HW eingeschränkt verwalten’)
    and dbo.Entity_Relation.lead_pk = @CIType AND
    (dbo.User_Table.id = @BenutzerID);
    — prüfen, ob dieser Benutzer auch für Vorgänger hinterlegt ist
    –SELECT @CIType_alt = dbo.Configuration_Item_Type.ci_type_pk
    –FROM dbo.Configuration_Item INNER JOIN
    — dbo.Configuration_Item_Type ON dbo.Configuration_Item.ci_type_pk = dbo.Configuration_Item_Type.ci_type_pk
    –WHERE (dbo.Configuration_Item.id = @CiType_vorher)

    — if @CIType_alt <> 0
    if @CiType_vorher not like ‘–‘
    Begin
    select @citype_vorher = left(@CiType_vorher ,len(@CiType_vorher) – 2);
    SELECT @Step_2= count( dbo.User_Table.user_pk)
    FROM dbo.Entity_Relation RIGHT OUTER JOIN
    dbo.User_Table ON dbo.Entity_Relation.trail_pk = dbo.User_Table.user_pk FULL OUTER JOIN
    dbo.User_User_Group FULL OUTER JOIN
    dbo.User_Group ON dbo.User_User_Group.user_group_pk = dbo.User_Group.user_group_pk ON dbo.User_Table.user_pk = dbo.User_User_Group.user_pk

    WHERE (dbo.Entity_Relation.entity_id = N’USER’) AND (dbo.Entity_Relation.relation_name = N’Speicherberechtigte’) AND (dbo.User_Group.id = N’HW eingeschränkt verwalten’)
    and dbo.Entity_Relation.lead_pk = @CIType_vorher AND
    (dbo.User_Table.id = @BenutzerID);
    End
    else
    set @step_2 = 1;

    if @Step_1 + @Step_2 = 2
    set @Result = 1
    else
    set @Result = 0;

    return (@result);

    END

    5. in POB im EnterpriseManager eine Condition erstellen für Insert

    6. in POB EM eine weitere Concition für Update
    dies ließ sich leider für mich nicht anders lösen, da mir beim Insert ein Parameter fehlt bzw. einen Datanbankfehler verursacht

    7. im EM noch eine Validation für Insert anlegen

    8. im EM noch eine Validation für Update anlegen

    9. im EM noch einen Folder für Speicherberechtigte anlegen

    10. jetzt kann beim CI-Typ ein Speicherberechtigtet hinterlegt werden

    dieser darf nun nur die CI-Types anlegen und ändern, bei denen er hinterlegt ist

    Die Screenshots konnte ich leider nicht anfügen, da ich diese wohl zuerst auf einen entsprechenden Server hochladen müsste.
    Wer sie möchte, bitte melden.

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.