Primeiro de tudo, que tipo de modelo de segurança você planeja implementar? Controle de Acesso Baseado em Função (RBAC) ou Controle de Acesso Discricionário (DAC)?
RBAC no modelo RBAC (Controle de Acesso Baseado em Função), o acesso aos recursos é baseado na função atribuída a um usuário. Nesse modelo, um administrador atribui um usuário a uma função que possui certos direitos e privilégios predeterminados. Devido à associação do usuário com a função, o usuário pode acessar determinados recursos e executar tarefas específicas. O RBAC também é conhecido como Controle de Acesso Não Discricionário. As funções atribuídas aos usuários são administradas centralmente.
DAC No modelo Controle de Acesso Discricionário (DAC), o acesso aos recursos é baseado na identidade do usuário. Um usuário recebe permissões para um recurso ao ser colocado em uma lista de controle de acesso (ACL) associada ao recurso. Uma entrada na ACL de um recurso é conhecida como Entrada de Controle de Acesso (ACE). Quando um usuário (ou grupo) é o proprietário de um objeto no modelo DAC, o usuário pode conceder permissão para outros usuários e grupos. O modelo DAC é baseado na propriedade dos recursos.
ver fonte
1) No RBAC: você precisa da tabela ElementType para atribuir direitos à função (os usuários são atribuídos às funções). O RBAC define: "O que essa função / usuário pode fazer". O administrador atribui direitos a funções e permissões a funções, atribui usuários a funções para acessar recursos. 2) No DAC: usuários e funções têm direito a elementos via lista de controle de acesso (propriedade). O DAC define: "quem tem acesso aos meus dados". Usuário (proprietário) concede permissões ao recurso de propriedade.
De qualquer forma, sugiro este modelo de dados:
CREATE TABLE ElementType
(
Id (PK)
Name
...
)
CREATE TABLE ElementBase
(
Id (PK)
Type (FK to ElementType)
...
)
(relacionamento um a um)
CREATE TABLE Element_A
(
Id (PK, FK to ElementBase)
...
)
CREATE TABLE Element_B
(
Id (PK, FK to ElementBase)
...
)
1) RBAC (relacionamento muitos-para-muitos)
CREATE TABLE ElementType_To_Role_Rights
(
RightId (PK)
RoleId (FK to Role)
ElementTypeId (FK to ElementType)
...
)
2) DAC (relacionamento muitos-para-muitos)
CREATE TABLE ElementBase_To_Actor_Rights
(
RightId (PK)
ElementBaseId (FK to ElementBase)
ActorId (FK to Actor)
...
)
CREATE TABLE Actor
(
Id (PK)
Name
)
CREATE TABLE User
(
Id (PK, FK to Actor)
Password
...
)
CREATE TABLE Role
(
Id (PK, FK to Actor)
...
)