Spooky SQL problem
Har en database med tre tabeller:Users (alle brugere på f.eks. et website)
Roles (alle tilgængelige roller for en bruger - f.eks. Admin, Author osv.)
Areas (alle tilgængelige områder for en rolle - for en Author kunne det f.eks. være "Forside" og "Underforside 1")
Role_Area (kæder roller og områder sammen)
Lidt langt script, men her kommer det:
CREATE TABLE [dbo].[Areas] (
[GUID] uniqueidentifier ROWGUIDCOL NOT NULL ,
[AreaName] [nvarchar] (50) COLLATE Danish_Norwegian_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Role_Area] (
[GUID] uniqueidentifier ROWGUIDCOL NOT NULL ,
[FK_Role] [uniqueidentifier] NOT NULL ,
[FK_Area] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Roles] (
[GUID] uniqueidentifier ROWGUIDCOL NOT NULL ,
[Rolename] [nvarchar] (50) COLLATE Danish_Norwegian_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Users] (
[UserID] [int] IDENTITY (1, 1) NOT NULL ,
[FK_GUID] [uniqueidentifier] NOT NULL ,
[FK_Role] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Areas] ADD
CONSTRAINT [DF_Areas_GUID] DEFAULT (newid()) FOR [GUID],
CONSTRAINT [PK_Areas] PRIMARY KEY CLUSTERED
(
[GUID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Role_Area] ADD
CONSTRAINT [DF_Usr_Area_GUID] DEFAULT (newid()) FOR [GUID],
CONSTRAINT [PK_Usr_Area] PRIMARY KEY CLUSTERED
(
[GUID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Roles] ADD
CONSTRAINT [DF_Usrs_GUID] DEFAULT (newid()) FOR [GUID],
CONSTRAINT [PK_Usrs] PRIMARY KEY CLUSTERED
(
[GUID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Users] ADD
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[UserID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Role_Area] ADD
CONSTRAINT [FK_Usr_Area_Areas] FOREIGN KEY
(
[FK_Area]
) REFERENCES [dbo].[Areas] (
[GUID]
),
CONSTRAINT [FK_Usr_Area_Usrs] FOREIGN KEY
(
[FK_Role]
) REFERENCES [dbo].[Roles] (
[GUID]
)
GO
ALTER TABLE [dbo].[Users] ADD
CONSTRAINT [FK_Users_Roles] FOREIGN KEY
(
[FK_Role]
) REFERENCES [dbo].[Roles] (
[GUID]
)
GO
- mit problem er, at jeg ud fra et eller flere områder skal finde netop den rolle, der har netop det eller de områder.
Eks.: jeg har et område (ID: "OmrForside"). Dette område er en "del" af tre roller ("AuthorForside", "AuthorDetMeste" og "Admin"), hvoraf den ene rolle ("AuthorForside") kun "består" af "OmrForside". I mit admin-modul har jeg for en bruger valgt, at han kun skal have adgang til "OmrForside" - hvordan finder jeg Rolle-ID'et på netop den rolle, som kun består af "OmrForside"?
- og hvordan finder jeg rollen, hvis nu jeg for en bruger vælger at tilknytte to eller flere områder?
Ligegyldigt hvordan jeg Select'er, får jeg smidt alle tre roller tilbage! Jeg har stirret mig blind på det, er jeg sikker på, og nu gider jeg ikke glo dumt på det mere.