Welcome to the POB User Group Online Community! › Forums › PUG DACH › Rechte auf CI/Item Type begrenzen
Tagged: rechte
-
AuthorPosts
-
27/08/2020 at 15:52 #4943
brubue
MemberHallo 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
27/08/2020 at 16:26 #4944Stefan Reichelt
ParticipantHi 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 verhindertKannst du damit etwas anfangen?
Grüße,
Stefan
27/08/2020 at 17:04 #4945TK
MemberStefan 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.08/09/2020 at 08:58 #4952brubue
MemberHallo 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
18/09/2020 at 12:45 #4954brubue
MemberHallo 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örigkeitUSE [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_pkWHERE (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
BEGINdeclare @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_pkWHERE (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_pkWHERE (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 verursacht7. 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. -
AuthorPosts
- You must be logged in to reply to this topic.