Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Asp.Net Muitos usuários um Banco de Dados

Olá

Estou desenvolvendo este projeto em MVC, que deverá ter muitos usuários, porém apenas um database.

Eu preciso achar a melhor forma de filtrar e controlar os dados por usuário, e isto está fogo...

Qual a melhor estratégia para isso ? Adicionar uma "clausula where" na classe REPOSITORY e na DAO? isso é errado, mas funciona.

Obs: Nas minhas tabelas do banco eu tenho uma coluna OwnerID que determina quais usuários podem acessar aquele registro.

 public class Repository<T> : IRepository<T> where T : BaseEntity
    {
        private readonly SmartContext _context;
        private DbSet<T> _entity;


        public Repository(SmartContext context)
        {
            this._context = context;
            _entity = context.Set<T>();
        }

        public int Count(int ownerID) ///
        {
            return this._entity.Where(a => a.OwnerID == ownerID).Count();
        }
    }

E na minha classe DAO

 public class MovimentacaoDAO<T> : IServices<T> where T : BaseEntity
    {
        private IRepository<T> _repository;
        private SmartContext _context;


        public MovimentacaoDAO(SmartContext context, IRepository<T> repository)
        {
            this._repository = repository;
            this._context = context;
        }

        public int Count(int ownerID)
        {
            return _repository.Count(ownerID);
        }


     }

Não sei se a CLASSE REPOSITORY deveria ter esta responsabilidade, ou seja, filtrar o OwnerID

Como será que as empresas como, contaazul, zoho, fazem, ou seja, você entra cria um novo usuário e tem acesso a parte das informações, mesmo que estejam dentro do mesmo banco de dados...

Obrigado

3 respostas
solução!

Olá Jose,

dado que você já tem a OwnerId na tabela, você pode colocar um where nas suas consultas na Repository que filtra de acordo com o id do usuário. O único cuidado que você tem que tomar em colocar na Repository é que você assume que todas as tabelas do seu banco tem a coluna OwnerId. Se isso não for uma verdade, vale mais a pena colocar o where no DAO específico, como o MovimentacaoDAO.

Colocar o Where nas consutlas Repository é uma boa prática ?

Em geral só é recomendado colocar no Repository as operações básicas que são comuns para todas as entidades, mesmo para wheres. Um exemplo de operações comuns são as operações de CRUD, dado que praticamente toda entidade precisará fazer uma inserção, remoção, atualização, buscas todos e busca por id. E a busca por id precisa da clausula where