Funções e Projetos do ASP.net

EDITAR - Reescreva minha pergunta original para fornecer um pouco mais de informação

Informação de fundo
No meu trabalho, estou trabalhando em um aplicativo Web ASP.Net para nossos clientes. Em nossa implementação, usamos tecnologias como autenticação de formulários com MembershipProviders e RoleProviders. Tudo correu bem até eu encontrar algumas dificuldades na configuração das funções, porque as funções não são de todo o sistema, mas estão relacionadas às contas e projetos dos clientes.

Não posso citar nossa configuração / fórmula exata, porque acho que nossa empresa não aprovaria isso ...

O que é um cliente / projeto?
Nossa empresa fornece informações de gerenciamento para nossos clientes anualmente (ou outro intervalo).
Em nossos sistemas, um cliente / contrato consiste em:

uma conta: informações sobre a empresapor conta, um ou mais produtos: o conjunto de informações de gerenciamento que forneceremospor produto, uma ou mais medições: um período de tempo no qual coletamos e relatamos os dados

Configuração do site da extranet
Eventualmente, queremos que todos os clientes possam acessar suas informações de gerenciamento com nosso sistema online. A extranet consiste em dois sites:

Site da empresa: fornece uma visão geral das informações da conta e dos produtosLocal de medição: após selecionar uma medição, informações detalhadas sobre esse período

O site de medição é a parte mais interessante da extranet. Criaremos submódulos para novas visões gerais, relatórios, gerenciamento e manutenção de recursos importantes para a pesquisa.

Nossa solução do Visual Studio consiste em vários projetos. Um aplicativo da web chamado Portal para a base. Os sites e módulos são diretórios virtuais dentro desse aplicativo (facilita o compartilhamento de MasterPages entre outras coisas).

Que tipo de papéis?
Os seguintes usuários (leia-se: papéis) usarão o sistema:

Administradores: usuários do desenvolvimento :) (não relacionados ao cliente, acesso total)Funcionários: funcionários da nossa empresa (não relacionados ao cliente, acesso total)Superusuário do cliente: gerentes de nível superior (acesso total à conta / medição)Pessoa de contato do cliente: contato principal (acesso total às suas medições)Gerente de clientes: um gerente de departamento (acesso limitado, dados específicos de uma medição)

E os usuários do ASP.Net?
O sistema terá muitos usuários do ASP.Net, vamos nos concentrar nos usuários do cliente:

Os usuários não são compartilhados entre contasO SuperUser X tem acesso automaticamente a todas (e novas) mediçõesO usuário Y pode ser o contato principal da medida 1, mas não tem função para a medida 2O usuário Y pode ser o contato principal da medida 1, mas ter uma função de gerente para a medida 2Os gerentes de departamento são muitos usuários individuais (por Medida), se o Gerente Z tiver um login para a Medida 1, gostaríamos de usá-lo novamente se ele participar da Medida 2.

Estrutura de URL
Estes são URLs típicos em nosso aplicativo:

http: // host / login - a tela de loginhttp: // host / projeto - a tela de visão geral da conta / produto (seleção de medidas)http: // host / projeto / 1000 - detalhes da medição (id: 1000)http: // host / projeto / 1000 / planejamento - visão geral do planejamento (para contato principal / superusuário)http: // host / projeto / 1000 / relatórios - downloads de relatórios (o departamento de gerente X pode acessar apenas o relatório X)

Também criaremos um URL de documento, no qual você pode solicitar um documento específico por meio do GUID. O sistema precisará verificar se o usuário possui direitos sobre o documento. O documento está relacionado a uma Medida, o Usuário ou funções específicas têm direitos específicos para o documento.

Qual é o problema? (finalmente ;))
As funções não são suficientes para determinar o que um usuário tem permissão para ver / acessar / baixar um item específico. Não basta dizer que um determinado item de navegação está acessível aos Gerentes. Quando o usuário solicita o Measurement 1000, precisamos verificar se o usuário não apenas possui uma função de Gerente, mas também uma função de Gerente para o Measurement 1000.

Resumido:

Como podemos limitar os usuários às suas contas / medidas?
(lembre-se de superusuários ver todas as medidas, alguns gerentes apenas medidas específicas)

Como podemos aplicar funções no nível de produto / medição? (o usuário X pode ser o contato principal da medida 1, mas apenas um gerente da medida 2)

Como podemos limitar o acesso do gerente à tela de relatórios e apenas aos relatórios de seus departamentos?

Tudo com a magia das classes asp.net, talvez com uma implementação personalizada de provedor de função.

Pergunta / problema semelhante ao Stackoverflow
ASP.NET, como gerenciar usuários com diferentes tipos de funções

questionAnswers(4)

yourAnswerToTheQuestion