Ich habe bisher noch nie Trigger verwendet und brauche mal einen kleinen Denkanstoß.
Ich habe mir eine einfache
DB-basierte Rechteverwaltung gebastelt die nach folgenden Schema funktioniert:
SQL-Code:
Tabelle Usergruppen
ID UniqueIdentifier
GrpName VarChar(20)
ID GrpName
-----------------------------------------------------------
{2FCE0D68-424F-4618-A7A5-144A60586273} User Lesen/Schreiben
{23450D65-4454-6FD8-A544-435343553BC1} Admins
-----------------------------------------------------------
Tabelle ZugriffsObjekte
ID UniqueIdentifier
Beschreibung VarChar(40)
VCL_Name VarChar(30)
ID Beschreibung VCL_Name
-----------------------------------------------------------------------------------------
{93989981-EE88-4BFC-828D-E04840AD642A} Benutzerverwaltung act_Benutzerverwaltung
{74971F6D-33B9-471B-8939-26A90637B83C} Datei öffnen act_FileOpen
{75DDA832-8237-4BF1-9418-5436BD33B644} Datei speichern act_FileSave
-----------------------------------------------------------------------------------------
Tabelle ACL_Usergruppen
ID_UserGruppen UniqueIdentifier
ID_ZugriffsObjekte UniqueIdentifier
ID_UserGruppen ID_ZugriffsObjekte
--------------------------------------------------------------------------------
{2FCE0D68-424F-4618-A7A5-144A60586273} {74971F6D-33B9-471B-8939-26A90637B83C} -- alle Öffnen --
{2FCE0D68-424F-4618-A7A5-144A60586273} {75DDA832-8237-4BF1-9418-5436BD33B644} -- alle Speichern --
{2FCE0D68-424F-4618-A7A5-144A60586273} {93989981-EE88-4BFC-828D-E04840AD642A} -- Admins Benutzerverw. --
--------------------------------------------------------------------------------
Das Prinzip dürfte klar sein.
In meinem Programm nehme ich die GruppenID des Benutzer und suche nach den zugeordneten ZugriffsObjekten.
Alle Actions in meiner ActionList die nicht gefunden werden, werden deaktiviert ...
Jetzt möchte ich folgendes erreichen:
Wenn eine neue Benutzergruppe erstellt wird, sollen dieser Gruppe automatisch Standardrechte zugewiesen werden (Datei öffnen darf jeder).
Dazu brauche ich einen Eintrag in der ACL_Usergruppen mit ID_UserGruppen"neu", ID_ZugriffsObjekte"DateiÖffnen".
Ich habe versucht mir einen Insert Trigger auf der Tabelle Usergruppen zu bauen, aber irgendwie fehlt mir da ein Stück Verständnis ...
Hier der klägliche Versuch:
SQL-Code:
CREATE TRIGGER Set_ACL_DEFAULTS
ON [dbo].[UserGruppen]
FOR INSERT
AS
DECLARE @GRP_ID
UniqueIdentifier
DECLARE @OBJ_ID
UniqueIdentifier
SET @GRP_ID = dbo.Usergruppen.ID
-- sollte doch die ID der gerade erstellten Gruppe werden
-- SQL meckert aber, das der Präfix dbo.UserGruppen falsch ist
-- nur ID ohne dbo.UserGruppen geht auch nicht (Feld 'ID' nicht gefunden)
SET @OBJ_ID =
SELECT ID
FROM dbo.ZugriffsObjekte
WHERE VCL_Name = '
act_FileOpen'
INSERT INTO ACL_Usergruppen (ID_UserGruppen, ID_ZugriffsObjekte)
VALUES (@GRP_ID,@OBJ_ID)
Was ist da falsch und wie geht es richtig ... ?
Danke,
Jens