[Ur] Multitenancy

Adam Chlipala adamc at csail.mit.edu
Sun May 13 09:31:14 EDT 2018


Can you explain why you don't want to run separate applications with 
separate databases?

On 05/13/2018 05:50 AM, Simon Van Casteren wrote:
> Hi,
>
> I'm in the process of making a new application for music schools, 
> using ur/web for front and backend. I'm at the point where I have two 
> customers and am starting to implement support for multiple 
> clients/tenants in one DB (postgres). I've been planning to implement 
> multitenancy from the start, but haven't had the time yet.
>
> Has anyone implemented a form of multitenancy in ur/web before?
>
> I see two areas that need consideration.
>
> 1. Deciding which user belongs to which tenant. Ideally I'd have a 
> seperate url for each tenant that I can give out to my clients (=the 
> schools), do some dns magic to send them all to the same exe, extract 
> the tenantname from the url and save the tenantId in a cookie. Also 
> ideally, the user's url would not change, ie. All urls should go to 
> myschool.coolschools.be <http://myschool.coolschools.be> during a 
> session, not getting redirected at all. This is all in an ideal 
> situation of course.
>
> 2. Database access: I'll have tenantId columns in all tables + foreign 
> keys and indexes on these columns. I'm a bit afraid I'll forget adding 
> tenantId = cookie.tenantid somewhere, so I was thinking I could make a 
> function that takes a sql_exp and a tenantId and adds these clauses to 
> all tables involved. Not 100% sure that will work but I think it's 
> possible, I haven't had to dive into the internals of sql_exp yet. 
> Secondly, I wonder if I can somehow declare my endpoints to be 
> tenantdepandent (all but the most general will be) maybe via newtyping 
> the transaction datatype and then allowing the execute only sql 
> queries that have the above function applied. Just dreaming out loud here.
>
> I'd be very interested in any ideas or examples!
>
> Simon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20180513/33851ef6/attachment.html>


More information about the Ur mailing list