pdaniels0013
pdaniels0013

Reputation: 411

How to limit data only to logged in user in Entity Framework Core Identity Easily

I am using Entity Framework Core Identity. All my Entities have a property called CreatedBy, a Foreign Key to the built in Identity User table. I have a GetAll() endpoint in my API that returns all records from the tables associated with these entities. I want this GetAll() to only return records that were created by the currently logged in user. I can get the UserId from the HttpContext, but I was wondering if I could automatically limit the records.

For example, I can perform an action like this to get this behavior:

return _context.Entities.Where(e => e.UserId == userIdFromHttpContext).ToList()

However this is some extra condition I would have to put in every single Where clause in every single future Get method I'd write. This is highly redundant to me.

I would like to simply just call

return _context.Entities.ToList()

which would automatically filter all the records out not associated to the currently logged in user.

Is there anything I can do, to configure some sort of "automatic" pre-defined where clause in the DbContext that applies to all tables in the context, just once? Preferably I'd like to inject the HttpContext into the DbContext (I know this can be done) and configure this behavior in the OnConfiguring() method there.

edit: I'd like to avoid a wrapper around the class around the context if possible as well. This application is being worked on by college students and I'd like them to use the "vanilla" Entity Framework conventions for grabbing data as opposed to working with some sort of custom implementation

Upvotes: 3

Views: 1081

Answers (1)

David Guida
David Guida

Reputation: 1155

you could use a Global Query Filter (more info here) In a nutshell, you can specify a Where during the call to OnModelCreating, and it will be applied every time you try to access that entity collection.

Upvotes: 5

Related Questions