Hello, I am going through the framework code and notice many places you use a combination of setting a Tenant Id and SaveChanges.
Shall I use this combination whenever I am saving records that belong to a specific Tenant?
Also, I know that SaveChanges() is usually used to get the Id of the newly added record, in the case of setting a Tenant, should I always follow it by Savechanges?
Finally, if an Entity has a TenantId, do I need to feed in the value or the framework would set this property to the current TenantID?
Thanks
16 Answer(s)
-
0
Hi,
In most cases you don't need to do it because ABP handles setting tenantId. If you want to operate on another tenant than current tenant, you need to swithc to target tenant's context by setting tenantId.
-
0
If I have some objects that don't have a TenantId as I need them in all Tenants. When retrieving them, shall I set the SetTenant(null)? Or irrespective of Tenant I will get all the data?
One more thing, is there a documentation on how Abp applies data filters, so that I fully understand how things work behind the scenes when it comes to Tenant Filter, etc.
Thanks
-
0
Hi,
SetTenantId(null) will make a connection to host db, so you will get all data right. We only have this document <a class="postlink" href="https://aspnetboilerplate.com/Pages/Documents/Data-Filters">https://aspnetboilerplate.com/Pages/Doc ... ta-Filters</a>.
Thanks.
-
0
And if I'm using same DB for all tenants and host and entities without tenant property, still I need to set tenant?
-
0
Well, There is something wrong going on here.
I have Host-Level entities that is data shared across all tenants.
The following is defined for permissions on one of those entities:
[AbpAuthorize(SmsPermissions.Pages_HOSTREFDATA_ENTITY, SmsPermissions.Pages_REFDATA_GLOBAL, RequireAllPermissions = false)]
The Host Admin is given Pages_HOSTREFDATA_ENTITY (This permission defined on Host level). The Tenant Admin is given Pages_REFDATA_GLOBAL (This permission is defined on Tenant level).
Now, when I log in with Tenant Admin and using SetTenantId(null), I get an exception saying at least one of the above 2 permissions are required.
How come?
-
0
Any idea please?
Thanks
-
0
Hi,
Can you share your full code for this ? Especially the section wrapped in SetTenantId(null) and the method contains SetTenantId(null).
There might be a bug in ABP, we will check it according to your response.
Thanks.
-
0
Hello, I will email you the code of that is causing the exception. Check your inbox please.
Thanks
-
0
Thanks,
I have got the email. We will test it probably today.
Thanks.
-
0
Hello Ismail, Were you able to check this issue?
Thanks
-
0
Hi,
I couldn't figure it out from the code block you sent. Can you share full source code with me ? I will try to take a look at it as soon as possible.
Thanks.
-
0
Sure. I am sharing the source code.
The code that is not working is commented out, just commented in and comment out the other code to be able to see what's going on.
Regards Bilal
-
0
Hi,
We have replied your question via email. In current version ABP does not allow checking permissions for current user in a switched tenant/host context. You need to change your design according to that.
-
0
Hi Ismail
Thano you for your reply.
I'm not getting what you mean when you say cannot check permissions in a switched host and tenant context. An example pls ?
Thanks
-
0
Hi Bilal,
In current design of ABP, when you enter an app service code using, let's say: UserId=2, TenantId=1 and then when you switch to host context using SetTenantId(null).
In below using statement, if you try to check permisison for current user, ABP tries to find user with TenantId=null and UserId=2 and since this user does not exists, permission check fails.
using(CurrentUnitOfWork.SetTenantId(null)){ ...check permisison here... }
I will redirect this question to Halil and I think he will put a better explanation here.
Thanks.
-
0
Thank you.
But I see a lot of use for the SetTenantId(Null) in the Framework code, how come it works? Aren't they checking permissions too?
But how would I solve such an issue? What's the recommendation?
I am getting data from host and tenant, at the same time, I have permissions so that not everyone can access the data.
Thank you Bilal