Se você deseja proteger ativos (arquivos, linhas de banco de dados, entidades de domínio, documentos etc.) em vez de recursos do aplicativo ou habilidades do usuário , a segurança baseada em função não se encaixa muito bem.
Um modelo melhor é usar Listas de controle de acesso (ACLs) como você conhece do NTFS. Você quase disse isso porque precisa atribuir permissões específicas em cada objeto para cada usuário ou função. Isso é o que uma ACL faz.
Se você precisar proteger objetos que são basicamente linhas no SQL Server, precisará definir tabelas personalizadas para suas ACLs, pois o SQL Server não tem suporte para permissões em nível de linha.
Com base nos dados dessas ACLs, você deve implementar as verificações de segurança necessárias em seus componentes de acesso a dados.
Aqui estão alguns links para respostas SO relacionadas:
- Controle de acesso no ASP.NET MVC dependendo dos parâmetros de entrada/camada de serviço?
- Qual é o melhor mecanismo para implementar segurança granular (ou seja, autorização) em um aplicativo ASP.NET MVC?
- Como implementar um código de convite para compartilhar recursos com outro usuário?