Pergunta

Eu acho que a resposta é um login de administrador e, em seguida, verificar se o usuário tem uma bandeira admin, mas também pensei de algumas outras questões relacionadas.

É melhor ter uma bandeira admin (attr_protected) na mesma tabela user como não admins? ou i deve ter uma tabela de usuários de administrador?

Devo criar uma aplicação rails separado para os usuários de administrador? Este pode ser um exagero, uma vez que ambos têm para acessar o mesmo datbase (para não mencionar que poderia ser uma enorme dor de configurar).

Qualquer outra sugestão? Agora eu só precisa proteger uma ou duas páginas para que eu mesmo olhou para HTTP básica ou autenticação Digest como uma medida temporária (o conteúdo protegido não é realmente tão privado / importante). Mas ... eu não sei como implementar HTTP auth para ações específicas, tenho visto apenas como implementá-lo para impedir o acesso diretório.

Qualquer direção e discussão seria ótimo. Estou certo de que outros usuários Stack Overflow irão beneficiar desta discussão.

Obrigado!

Foi útil?

Solução

Ryan Bates tem uma grande série de três Railscasts sobre este tema que deve lhe dar algum alimento para o pensamento:

Há também três Railscasts em diferentes técnicas de autenticação:

Outras dicas

Eu estou usando restful_authentication plug-in para esta finalidade. E é muito simples para restringir o acesso a qualquer controlador ou qualquer método. Por exemplo, no controlador de adicionar esta função:

private
def authorized?
  user.admin?
end

ou

private
def authorized?
  user.admin? if update? || create?
end

I definido administrador? método no meu modelo de usuário. Também criei atualização? e criar? métodos que o check qual a ação foi chamado. Em restful_authentication autorizado? método é sempre executado ao acessar controlador.

Gostaria de colocar tudo em um aplicativo e em uma tabela (não criar usuários e mesa admin). Você pode proteger bandeira admin em seu controlador de usuários, permitindo definir este valor apenas para usuários administradores existentes.

Eu acho que depende do tipo de administração.

Se a vista seus administradores terão do site é o mesmo que um usuário normal de, mas com privilégios adicionais, eu iria com uma bandeira de administração. (Ou, como suas necessidades expandir, uma mesa de papéis de pleno direito.) Esta é uma situação onde todo mundo vê a mesma coisa, mas os administradores têm acesso a diversas acções (apagar? Edição? Proibir? Etc.) que os usuários normais não.

Se a ver o seu administradores necessidade é totalmente diferente do que o site normal, eu recomendaria uma aplicação Rails completamente separado que acessa o mesmo banco de dados. Por exemplo, se os seus "administradores" são realmente funcionários de help desk que vão receber chamadas ou lidar com questões de facturação, eles podem ter visões completamente diferentes do banco de dados (e talvez maneiras de editar os dados) que não estão disponíveis em a aplicação regular.

A desvantagem de ter vários sites é que é possível ter modelos (validações, associações, etc.) ficar fora de sincronia. A desvantagem de ter um único site é que você pode acabar de inserir todos os tipos de código feio "se-admin" no previamente fácil de entender partes do seu site. Que problema é mais fácil de manusear depende de suas necessidades.

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