Pergunta

O que é o melhor esquema de banco de dados para rastrear os controles de acesso baseados em funções para uma aplicação web?

Eu estou usando Rails, mas o RBAC plug-in ligadas por Google parece sem manutenção (apenas 300 commit SVN; mais recente foi há quase um ano)

.

O conceito é bastante simples de implementar a partir do zero, mas o suficiente complexo e importante que vale a pena ficar direita.

Assim como outros arquiteto e implementar seu modelo RBAC?

Foi útil?

Solução

Para meu conhecimento bastante básico nessa área, os atores básicos de um RBAC são:

  • Recursos.
  • permissões.
  • Os usuários.
  • Roles (ou seja, os grupos).

Resources <- exigem ->. ( um ou muitos ) Permissões

Funções <- são coleções de ->. ( um ou muitos ) Permissões

Usuários <- pode ter ->. ( um ou muitos ) Funções

As tabelas para tal modelo um seria:

  • permissão
  • O papel
  • user
  • role_permission
  • USER_ROLE

Agora você pode querer incluir recursos aqui também se você quiser que os usuários de seu aplicativo para ser capaz de configurar as permissões que a necessidade de recursos. Mas eu nunca precisei disso. Espero que ajude.

Outras dicas

Aqui está um diagrama simples para ilustrar excelente resposta de Amr Mostafa

enter descrição da imagem aqui

Acontece que eu estar trabalhando no sub-sistema RBAC aqui no trabalho para eles momento ... que coincidência.

Meu modelo é baseado nos blocos de construção dos diferentes entidades no sistema que exigem permissões, sejam elas atributos para visualizar / atualizar ou ações a serem executadas. Há também, é claro, diferentes papéis no sistema (que podem ser dadas aos usuários), e a cola que mantém a coisa toda em conjunto é a regra Acesso , que conecta um papel específico, uma entidade de precisar de permissão específica e o permissão concedido. Uma regra de acesso pode parecer como estes:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

e assim por diante. Vou deixar o ERD como um exercício para o leitor ;-) se tiver dúvidas, deixe um comentário.

Yuval = 8 -)

Eu acho que a resposta à sua pergunta vai tão profundo como você deseja ir. Se acontecer de você pensar em colocar papéis em grupos e, em seguida, associando grupos com os usuários não seria suficiente. Eventualmente, você vai precisar para dar permissões específicas para um usuário em um objeto específico (um fórum, um vídeo etc).

Estou mais perto de resposta de Yuval, todos necessidade que é para objetos + + usuários associados todo o projeto ações. Para fornecer essa; um objeto base (Entity) faz todo o sentido. Qualquer objeto herdando de Entidade pode ser facilmente associado a um usuário + ação desta forma.

Como você também deseja manter as coisas simples; a minha sugestão seria;

  • Qualquer objeto devido a restrições do RBAC deve derivar de uma base Entidade.
  • Deve haver uma lista de funções, que são um-para-um relacionado com uma entidade.
  • Deve haver uma lista das relações entre usuários e funções.

Para levar as coisas um passo adiante, eu também recomendo o seguinte (para um rbac automatizado)

  • acesso baseado em serviço que eu uso para meus objetos. Isso é; I criar respositories de objetos (que fazem o db de acesso para mim) e eu repositórios de acesso através de funções de serviço.
  • Eu uso um atributo personalizado no início de cada função serviço. Isso define o papel necessário para o acesso dessa função.
  • Eu uso o parâmetro de usuário para acesso a todas as funções meus serviços, e cada função de serviço faz uma verificação de papel antes de executar-se. Reflexão me ajuda a entender qual a função que eu chamo, e que tipo de papel que tem (via atributos personalizados)
  • Eu também executar um inicializador no meu inicialização do aplicativo, e ele verifica todas as funções (e seus atributos) e vê se eu adicionei um novo papel exigido. Se há um papel que acabou de adicionar e não parece estar no db, cria-lo no banco de dados.

Mas, infelizmente, isso é apenas disponível para .NET, tanto quanto eu sei Java não tem atributos personalizados de modo que é ainda não provável que esteja disponível para Java.

Eu gostaria de vir para cima com alguns exemplos de código, mas eu sou muito preguiçoso para fazer isso. Ainda assim, se você tiver dúvidas sobre a minha maneira de rbac; você pode perguntar aqui e eu certamente vou responder.

Requisito Papel funciona com autenticação repousante muito bem para fornecer funções de autenticação baseados em funções e está bem preservado.

Para aplicações .net você deve olhar para algo como Visual Guarda http: //www.visual-guard. com / para evitar ter que lidar com as permissões e papéis a partir do zero.

Também para .net, você tem os provedores de associação e de função e autorização manuseados com configuração. http://www.odetocode.com/Articles/427.aspx

Tente https://github.com/ThoughtWorksStudios/piece , é um mecanismo de regras para você para gerenciar o controle de acesso baseado em função de usuário:

  1. Definir regras de controle de acesso
  2. Combine regras para a construção de novas regras

Você pode encontrar exemplo de aplicação Rails completo aqui: https://github.com/xli/piece-blog

Introdução ao RBAC -

sistema de controle de acesso com base em funções é um método de restringir o acesso a 'algumas fontes ou aplicações ou alguns recursos de aplicativos' com base nas funções de usuários de organização.

Aqui, as restrições podem ser por meio de várias permissões, aqueles são criados pelo administrador para restringir o acesso, e essas permissões representa coletivamente um papel, que será atribuído ao usuário.

E se formos leve mais profundo no RBAC, que basicamente contém 3 características.

1) Autenticação - Ela confirma a identidade do usuário. Normalmente, isso é feito através de contas de usuário e senhas ou credenciais.

2) Autorização - Ele define o que o usuário pode fazer e não pode fazer em um aplicativo. Ex. ‘Ordem Modificando’ é permitido, mas ‘criar nova ordem’ não é permitido.

3) Auditoria de ações do usuário em aplicativos. - Ele mantém o controle das ações do usuário em aplicações, bem como que concedeu que acesso a quais usuários

?

Este foi vista superior imagem muito básica do sistema RBAC.

Estrutura Básica do sistema RBAC pode conter os seguintes componentes: Usuários, funções, permissões ou restrições, recursos.

  • As permissões ou restrições - permissões representa um acesso aos recurso do aplicativo.
  • Role - Ele contém coleção de permissões
  • usuário - simples ou múltiplas funções atribuídas ao usuário, por isso, eventualmente usuário contém permissões através de meios de papel.

Além disso, você também pode ter coleção de usuários - chamados - grupos e papel podem ser atribuídos a grupos, se você quiser dar suporte a cenários complexos. Então, essa foi informações muito básicas sobre a estrutura RBAC.

Eu realmente gosto deste post: https: // conteúdo. pivotal.io/blog/access-control-permissions-in-rails

EDIT:

Parece que ryanb de Railscasts pensado ao longo das mesmas linhas e criou uma jóia chamada cancan https: // github. com / ryanb / cancan usando uma técnica básica semelhante ao pós pivotollabs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top