Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

MSSQL: AFTER Insert Trigger verstehen ...

  Alt 9. Jan 2005, 13:36
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
  Mit Zitat antworten Zitat