Hello, my software will cater for individual users, as well as enterprise users. For enterprise users, they will become their own tenant and have their own users, so the editions and features are great. However, for individual users, all of them will be within the same tenant (default tenant), and they can sign up as free or paid with different pricing tiers and allowing them to different features and limitations. How would I go about allowing the individual users within the same tenant to have different editions?
Thank you.
11 Answer(s)
-
0
Hi,
There is no built-in solution for this. May be you can create a tenant per user. Or with a more difficult way: you should develop your own logic for this.
-
0
Thank you for your reply, I am building a software with a tenancy concept similar to event cloud, where many users are together within the default tenant that can create and share events with each other. So I don't think the first option to have each user become a tenant is viable. For the second option, how would you suggest developing myself? I was thinking of adding another column into the edition table, to tie it to a user. Another way would be to utilize the setting table, to have each feature become a setting. What do you think? Thanks
-
0
Hi,
I think it is easier to implement this with settings or permissions.
Thanks.
-
0
Hello, I'm starting to implement this and trying to figure out the way to do this. How would I implement a feature checker and setting checker together, since essentially they will be the restriction for the same items?
The default tenant is where all the individual users (not tied to a company) will reside in. Am I right to say that in the default tenant, all features will be set to allowed, all maximum count will all be unlimited. However, each individual user will have their own settings depending on their pricing tiers. The settings will be on the user scope.
For other tenants, all users within those tenants won't have any individual user settings, their only restrictions are the values in the tenant features.
Should I implement both features and editions, and settings, to cater for my scenario? However this means double checking for every restriction I have. I would have to check for the features values, then individual setting values, before allowing user access. It will be messy on the front end too as I need to check both values too.
Or should I just forgo the features and editions module and build this entirely on settings, since settings is much more powerful? Seems a waste because the editions and features deal with what I plan to do and it ties to payment module, just that it is not powerful enough to tie to individual users.
Or lastly, should I extend features and editions to individual users? How much work do I need to do if I want to extend features and editions to individual users?
Thanks
-
0
Hi,
Binding features to individual users is a bit hard work. We didn't think it like that at the beginning and it is hard for us to change it now.
I suggest you to consider this as the last option. Maybe it is better to implement it with settings.
By the way, why do you grant unlimited access to default tenant ?
Thanks.
-
0
I was thinking to grant default tenant unlimited access and restrict based on the user settings. For any other tenant I will grant access based on their edition. This way, I won't have to write specific code for just default tenant I think. So I will create 2 tables, called Tiers, and TierSettings. and add one more column into User table binding to Tiers. When user registers inside default tenant, depending on which pricing tier they choose, I will insert the respective settings into their user settings. The checking will be something like
var createdTaskCountInThisMonth = GetCreatedTaskCountInThisMonth(); if (createdTaskCountInThisMonth >= FeatureChecker.GetValue("MaxTaskCreationLimitPerMonth").To<int>() || createdTaskCountInThisMonth >= SettingManager.GetSettingValue("MaxTaskCreationLimitPerMonth")) { throw new AbpAuthorizationException("You exceed task creation limit for this month, sorry :("); }
Is this what you mean when u said to use settings?
-
0
Hi,
Is this what you mean when u said to use settings?
No, I didn't think tier level but your solution seems better.
-
0
May I know what did you originally mean?
I decide to skip using settings entirely, and implement the pricing tier on my own. Otherwise I will have 2 things to maintain and i wish to keep things DRY. Like if we decide to change a tier setting values, we need to trace back all the user settings which implemented it and change that too..
However, is there a way I can put it in the client side dynamic scripts?? For example using settings, I can call abp.setting.get("MaxTaskCreationPerMonth"); How would I create one for my tier system?
Thanks.
-
0
Hi,
Do you use MVC 5.x or ASP.NET Core version ?
-
0
I am using .NET Core and Angular, with the .NET Core 1.1 Framework
-
0
Hi,
We call GetAll action from AbpUserConfigurationController from client side to get all necessary values. You can create a similar controller and action to get your settings from client side.
Please take a look at our code here and investigate it to write your own version. <a class="postlink" href="https://github.com/aspnetboilerplate/aspnetboilerplate/blob/master/src/Abp.Web.Common/Web/Configuration/AbpUserConfigurationBuilder.cs#L66">https://github.com/aspnetboilerplate/as ... der.cs#L66</a>
Thanks.