Tabela DB permiçoes de acesso, o que vocês acham que é melhor?

Estou implementando permições no sistema, gostaria de saber qual das opções de tabelas abaixo vocês usariam, e porquê?

TABELAS 1
funcionarios(id,nome,idPerfil)
perfil(id,nome,acessos) | acessos = string separada por vírgula
– Mais fácil de buscar no banco

ou

TABELAS 2
funcionarios(id,nome,idPerfil)
perfil(id,nome)
acessos(id, nome)
acessoperfil(idPerfil, idAcesso)
– Mais “correto”

e ai? :-o

Na minha opinião, você pode pensar em fazer do primeiro jeito se:

  1. Os perfis são imutáveis, ou seja, depois de criados ficam com aqueles acessos para sempre.
    E
  2. Não será necessário fazer pesquisas por acesso (por exemplo, listar usuários que possuem acesso X)

Mas veja bem, eu disse que pode PENSAR em fazer… mesmo assim o segundo continua sendo mais correto.

Eu usaria as Tabelas 2.

Motivos:

1- Qual seria o espaço destinado para o campo ‘acessos’? Se for pequeno, pode não caber num momento futuro. Se for grande, você pode estar alocando espaço desnecessário;

2- Economia de tempo na inserção. Você não precisa procurar um determinado registro para atualizá-lo. Simplesmente insere uma nova linha;

2- É a mais correta.

[]'s

[quote=gomesrod]Na minha opinião, você pode pensar em fazer do primeiro jeito se:

  1. Os perfis são imutáveis, ou seja, depois de criados ficam com aqueles acessos para sempre.
    E
  2. Não será necessário fazer pesquisas por acesso (por exemplo, listar usuários que possuem acesso X)

Mas veja bem, eu disse que pode PENSAR em fazer… mesmo assim o segundo continua sendo mais correto.[/quote]

Não discordando de você, mas …

1) Os perfis são imutáveis, ou seja, depois de criados ficam com aqueles acessos para sempre.
Se forem imutaveis, não muda nada, pois vai mudar a String, to errado?
E
2) Não será necessário fazer pesquisas por acesso (por exemplo, listar usuários que possuem acesso X)
Se eu for listar também da do primeiro SELECT … WHERE perfil.acesso LIKE “%algum.acesso%”

Que acham? :?:

Era mais pra ouvir umas opiniões, acho que a segunda forma é melhor mesmo…

O comando SQL nem fica complicado.

Vlw ai, fica o tópico ai pr ase alguém passar por isso.

[size=7]Palavras chaves:
db, bd, permissões, acesso, mysql, banco de dados, como fazer[/size]

Opa… blz?

Eu pessoalmente prefiro trabalhar com a seguinte estrutura:

Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Desta forma tu consegue criar perfis e associar ao usuario e caso necessite de alguma permissao especifica que nao existe no perfil pode adicionar separadamente(PermissaoUsuario)

Eu gosto desta abordagem… espero ter contribuido…

Abs

[quote=leoduval]Opa… blz?

Eu pessoalmente prefiro trabalhar com a seguinte estrutura:

Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Desta forma tu consegue criar perfis e associar ao usuario e caso necessite de alguma permissao especifica que nao existe no perfil pode adicionar separadamente(PermissaoUsuario)

Eu gosto desta abordagem… espero ter contribuido…

Abs [/quote]

Então, permissão especifica?
Que fuja do perfil?

Se for isso, boa a idéia, mas digamos que vai virar uma zuera, pq se tem perfil (gerente, atendente, estagiario), é para o funcionario se enquadrar em algum, não acha?

[quote=rcipriani][quote=leoduval]Opa… blz?

Eu pessoalmente prefiro trabalhar com a seguinte estrutura:

Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Desta forma tu consegue criar perfis e associar ao usuario e caso necessite de alguma permissao especifica que nao existe no perfil pode adicionar separadamente(PermissaoUsuario)

Eu gosto desta abordagem… espero ter contribuido…

Abs [/quote]

Então, permissão especifica?
Que fuja do perfil?

Se for isso, boa a idéia, mas digamos que vai virar uma zuera, pq se tem perfil (gerente, atendente, estagiario), é para o funcionario se enquadrar em algum, não acha?[/quote]

A ideia é inserir na tabela Permissoes todas as permissões do sistemas (Incluir Usuario, Excluir Usuario, Pesq. Usuario, Incluir Perfil…etc) Na tabela Perfil tu cadastra somente o perfil e na tabela PerfilPermissao tu associa todas as permissoes ao perfil… até ai ok? O usuario que tiver este perfil vai ter estas permissoes associadas… supondo que o usuario gerente de determinado setor da empresa precisa de uma permissao especifica do modulo financeiro e não tem a necessidade de adicionar esta permissao ao perfil tu podes somente associar a permissao ao usuario através da tabela PermissaoUsuario.

Se tiver alguma duvida da um tok…

abs

Eu prefiro optar pelos perfis, nada além disso, se o usuário precisa de uma permissão maior que outros do mesmo perfil, deve-se criar um perfil novo com as novas permissões.

Eu prefiro a segunda abordagem, não é complexo buscar os acessos, basta um join a mais xD

Eu prefiro a abordagem que falei porque acho que fica mais flexivel… mas vai de cada um…

Abs

[quote=leoduval][quote=rcipriani][quote=leoduval]Opa… blz?

Eu pessoalmente prefiro trabalhar com a seguinte estrutura:

Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Desta forma tu consegue criar perfis e associar ao usuario e caso necessite de alguma permissao especifica que nao existe no perfil pode adicionar separadamente(PermissaoUsuario)

Eu gosto desta abordagem… espero ter contribuido…

Abs [/quote]

Então, permissão especifica?
Que fuja do perfil?

Se for isso, boa a idéia, mas digamos que vai virar uma zuera, pq se tem perfil (gerente, atendente, estagiario), é para o funcionario se enquadrar em algum, não acha?[/quote]

A ideia é inserir na tabela Permissoes todas as permissões do sistemas (Incluir Usuario, Excluir Usuario, Pesq. Usuario, Incluir Perfil…etc) Na tabela Perfil tu cadastra somente o perfil e na tabela PerfilPermissao tu associa todas as permissoes ao perfil… até ai ok? O usuario que tiver este perfil vai ter estas permissoes associadas… supondo que o usuario gerente de determinado setor da empresa precisa de uma permissao especifica do modulo financeiro e não tem a necessidade de adicionar esta permissao ao perfil tu podes somente associar a permissao ao usuario através da tabela PermissaoUsuario.

Se tiver alguma duvida da um tok…

abs

[/quote]

Então, essa forma é boa sim, aqui na empresa o sistema é feito assim, porém o perfil não fica sendo do usuário, e sim, um pacote de permissões…

Com certeza essa forma é mais flexível, entretanto aqui por ser flexivel vira uma bagunça, pois tem gente que tem permissão que não deveria…

De qualquer forma acho que vou adotar esta opção, mas por enquanto não vou disponibilizar no sistema a função de permitir acessos fora do perfil… ai se no futuro neessitar, o programa e o banco ja estão criados da maneira mais dinâmica.

Thanks

Então…

Nesse modelo:
Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Como ficaria a SQL pra buscar todas as permições de um determinado perfil?

[quote=rcipriani]Então…

Nesse modelo:
Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Como ficaria a SQL pra buscar todas as permições de um determinado perfil?[/quote]

permissões é a grafia correta!

Select PE.Descricao Perfil, P.Descricao Permissao
From  PerfilPermissao PP Inner Join
          Permissao P On PP.IdPermissao = P.IdPermissao Inner Join
           Perfil PE On PP.IdPerfil = PE.IdPerfil

Algo do tipo!

[quote=Nicolas Fernandes][quote=rcipriani]Então…

Nesse modelo:
Permissao(idPermissao, descricao, idPai)
Perfil(idPerfil, descricao)
PerfilPermissao(idPerfil, idPermissao)
Usuario(idUsu,…, idPerfil)
PermissaoUsuario(idUsu, idPermissao)

Como ficaria a SQL pra buscar todas as permições de um determinado perfil?[/quote]

permissões é a grafia correta!

Select PE.Descricao Perfil, P.Descricao Permissao
From  PerfilPermissao PP Inner Join
          Permissao P On PP.IdPermissao = P.IdPermissao Inner Join
           Perfil PE On PP.IdPerfil = PE.IdPerfil

Algo do tipo![/quote]

Nossa, que feio, Permições… AHUAHU… acontece… mas no programa ta tudo com SS…

Então minhas tabelas tinham o nome um pouquinho diferente e eu queria pegar somente as permissões de um perfil.

Ficou assim:

SELECT pe.codigo
FROM permissaoperfil pp
INNER JOIN permissao pe ON pp.idPermissao = pe.id
INNER JOIN perfis p ON pp.idPErfil = p.id
WHERE p.id = 4

Obrigado!