DefaultPermissions

Aus TRENZ PartnerNet
Wechseln zu: Navigation, Suche

Standardberechtigungen, abgelegt in der Tabelle DefaultPermissions, setzten für Container-Typen beim Erstellen eines Containers bestimmte Standardrechte. Diese Tabelle wird über die GUI in der Container-Typen-Verwaltung gefüllt.

Spalten

  • id: Wird automatisch gesetzt.
  • CTypID: Container-Typ-ID (Container_Typ)
  • Domian: ?
  • UserID: Die User-ID
  • Zugriff: setzt die entsprechenden Rechte (0 = kein Zugriff; 1= Vollzugriff; 2= nur lesen)

Default-Permissions aktivieren

Um die Default-Permissions zu aktivieren müssen folgende SQL-Scripte ausgeführt werden:

CREATE FUNCTION [dbo].[el_CompareZugriff](@Zugriff smallint)
RETURNS smallint
AS
BEGIN
	IF @Zugriff > 1
		RETURN 0

	IF @Zugriff = 0
		RETURN -1

	RETURN 1
END
GO


CREATE TRIGGER [dbo].[el_container_trigger_SetDefaultPermissions] ON [dbo].[container] AFTER INSERT
AS
BEGIN
	SELECT id, Typ, erfsab INTO #ContainersToReset FROM inserted

	DECLARE @Permissions table(id int IDENTITY(1,1), CID int, UserID int, CTypID int, Zugriff smallint)

	-- Owner
	INSERT INTO @Permissions
	SELECT i.id, i.erfsab, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 0

	-- Own groups
	INSERT INTO @Permissions
	SELECT i.id, UserID, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 1
	AND DP.UserID IN (SELECT GroupUserID FROM zUserGroups_v WHERE UserID = i.erfsab)
	UNION
	SELECT i.id, zUG.UserID, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, zUserGroups_v zUG, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 1
	AND DP.UserID = zUG.GroupUserID
	AND DP.UserID IN (SELECT GroupUserID FROM zUserGroups_v WHERE UserID = i.erfsab)

	-- Other users and groups
	INSERT INTO @Permissions
	SELECT i.id, DP.UserID, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 2
	AND DP.UserID NOT IN (SELECT GroupUserID FROM zUserGroups_v WHERE UserID = i.erfsab)
	UNION
	SELECT i.id, zUG.UserID, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, zUserGroups_v zUG, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 2
	AND DP.UserID = zUG.GroupUserID
	AND DP.UserID NOT IN (SELECT GroupUserID FROM zUserGroups_v WHERE UserID = i.erfsab)

	-- Everyone else
	INSERT INTO @Permissions
	SELECT i.id, U.id, i.Typ, DP.Zugriff
	FROM DefaultPermissions DP, User_Slave U, #ContainersToReset i
	WHERE DP.CTypID = i.Typ AND DP.Domain = 3

	INSERT INTO zRechte(RechtID, ReferenzID, UserID, Zugriff, aendat, aensab)
	SELECT
		-1, CID, UserID, (
			SELECT TOP 1 Zugriff
			FROM @Permissions
			WHERE CID = A.CID
			AND CTypID = A.CTypID
			AND UserID = A.UserID
			ORDER BY dbo.el_CompareZugriff(Zugriff) DESC
			) Zugriff
		,
		GETDATE(), B.erfsab
	FROM @Permissions A, #ContainersToReset B
	WHERE A.CID = B.id
	GROUP BY CID, CTypID, UserID, B.erfsab
	ORDER BY CID, CTypID, UserID, B.erfsab
END
Meine Werkzeuge