// Constructor public PermissionsController(ApplicationContext db, ILogger <PermissionsController> logger, IStringLocalizer <PermissionsController> localizer, IMapper mapper, ITenantUserInfoAccessor tenantInfo) { _db = db; _logger = logger; _tenantInfo = tenantInfo; }
public DynamicModelMetadataProvider(ICompositeMetadataDetailsProvider detailsProvider, IOptions <MvcOptions> optionsAccessor, IHttpContextAccessor contextAccessor, ITenantUserInfoAccessor tenantInfo, IStringLocalizer <DynamicModelMetadataProvider> localizer) : base(detailsProvider, optionsAccessor) { _contextAccessor = contextAccessor; _tenantInfo = tenantInfo; _localizer = localizer; }
public ViewsController(ApplicationContext db, IModelMetadataProvider metadataProvider, ILogger <ViewsController> logger, IStringLocalizer <ViewsController> localizer, IMapper mapper, ITenantUserInfoAccessor accessor) : base(logger, localizer, mapper) { _db = db; _metadataProvider = metadataProvider; _logger = logger; _localizer = localizer; _mapper = mapper; _accessor = accessor; }
// Constructor public SettingsController(ApplicationContext db, ILogger <SettingsController> logger, IStringLocalizer <SettingsController> localizer, IMapper mapper, ITenantUserInfoAccessor tenantInfo) { _db = db; _logger = logger; _localizer = localizer; _mapper = mapper; _tenantInfo = tenantInfo; _culturesRepo = new CulturesRepository(); }
public RolesController(ILogger <RolesController> logger, IStringLocalizer <RolesController> localizer, IServiceProvider serviceProvider, ITenantUserInfoAccessor tenantInfoAccessor) : base(logger, localizer, serviceProvider) { _db = serviceProvider.GetRequiredService <ApplicationContext>(); _metadataProvider = serviceProvider.GetRequiredService <IModelMetadataProvider>(); _tenantInfoAccessor = serviceProvider.GetRequiredService <ITenantUserInfoAccessor>(); _logger = logger; _localizer = localizer; }
// Constructor public SettingsController(ApplicationContext db, ILogger <SettingsController> logger, IGlobalSettingsCache globalSettingsCache, IStringLocalizer <SettingsController> localizer, IMapper mapper, ITenantUserInfoAccessor tenantInfo) { _db = db; _logger = logger; _globalSettingsCache = globalSettingsCache; _localizer = localizer; _mapper = mapper; _tenantInfo = tenantInfo; }
public AgentsController(ApplicationContext db, IModelMetadataProvider metadataProvider, ILogger <AgentsController> logger, IStringLocalizer <AgentsController> localizer, IMapper mapper, ITenantUserInfoAccessor tenantInfo) : base(logger, localizer, mapper) { _db = db; _metadataProvider = metadataProvider; _logger = logger; _localizer = localizer; _mapper = mapper; _tenantInfo = tenantInfo; }
public ViewsRepository(ApplicationContext db, IStringLocalizer localizer, ITenantUserInfoAccessor accessor) { _db = db; // Initialize localizer 1 and localizer 2 based on the company languages var tenantInfo = accessor.GetCurrentInfo(); _localizer = localizer.WithCulture(new CultureInfo(tenantInfo.PrimaryLanguageId)); if (tenantInfo.SecondaryLanguageId != null) { _localizer2 = localizer.WithCulture(new CultureInfo(tenantInfo.SecondaryLanguageId)); // TODO } }
public LocalUsersController(ApplicationContext db, AdminContext adminDb, IModelMetadataProvider metadataProvider, ILogger <LocalUsersController> logger, IStringLocalizer <LocalUsersController> localizer, IMapper mapper, ITenantIdProvider tenantIdProvider, ITenantUserInfoAccessor tenantInfo, IBlobService blobService) : base(logger, localizer, mapper) { _db = db; _adminDb = adminDb; _tenantIdProvider = tenantIdProvider; _metadataProvider = metadataProvider; _logger = logger; _localizer = localizer; _mapper = mapper; _tenantInfo = tenantInfo; _blobService = blobService; }
/// <summary> /// This trick makes it possible to injected the ApplicationContext into other components via DI as usual /// but it automatically configures itself with the correct options. Inspired from this Microsoft sample: https://bit.ly/2TIEFMA /// </summary> /// <param name="shardResolver">The service that resolves the shard connection string</param> /// <param name="tenantIdProvider">The service that retrieves tenants Ids from the headers</param> /// <returns></returns> private static DbContextOptions <ApplicationContext> CreateDbContextOptions( IShardResolver shardResolver, ITenantIdProvider tenantIdProvider, IUserProvider userService, ITenantUserInfoAccessor accessor) { // Prepare the options based on the connection created with the shard manager var optionsBuilder = new DbContextOptionsBuilder <ApplicationContext>(); string connectionString = shardResolver.GetShardConnectionString(); if (tenantIdProvider is DesignTimeTenantIdProvider) { // Only for design time when running "ef migrations" command from the CLI optionsBuilder = optionsBuilder.UseSqlServer(connectionString); } else { int tenantId = tenantIdProvider.GetTenantId() ?? throw new Controllers.Misc.BadRequestException("Tenant Id was not supplied"); // Unless this is a fake design time resolver, apply row level security and pass context info SqlConnection sqlConnection = new SqlConnection(connectionString); SqlCommand cmd = sqlConnection.CreateCommand(); cmd.CommandText = @" -- Set the global values of the session context EXEC sp_set_session_context @key=N'TenantId', @value=@TenantId; EXEC sp_set_session_context @key=N'Culture', @value=@Culture; EXEC sp_set_session_context @key=N'NeutralCulture', @value=@NeutralCulture; -- Get the User Id DECLARE @UserId INT, @ExternalId NVARCHAR(450), @Email NVARCHAR(255), @SettingsVersion UNIQUEIDENTIFIER, @PermissionsVersion UNIQUEIDENTIFIER, @ViewsAndSpecsVersion UNIQUEIDENTIFIER, @UserSettingsVersion UNIQUEIDENTIFIER, @PrimaryLanguageId NVARCHAR(255), @PrimaryLanguageSymbol NVARCHAR(255), @SecondaryLanguageId NVARCHAR(255), @SecondaryLanguageSymbol NVARCHAR(255) ; SELECT @UserId = Id, @ExternalId = ExternalId, @Email = Email, @PermissionsVersion = PermissionsVersion, @UserSettingsVersion = UserSettingsVersion FROM [dbo].[LocalUsers] WHERE TenantId = @TenantId AND IsActive = 1 AND (ExternalId = @ExternalUserId OR Email = @UserEmail); -- Set LastAccess (Works only if @UserId IS NOT NULL) UPDATE [dbo].[LocalUsers] SET LastAccess = SYSDATETIMEOFFSET() WHERE Id = @UserId; -- Get hashes SELECT @SettingsVersion = SettingsVersion, @ViewsAndSpecsVersion = ViewsAndSpecsVersion, @PrimaryLanguageId = PrimaryLanguageId, @PrimaryLanguageSymbol = PrimaryLanguageSymbol, @SecondaryLanguageId = SecondaryLanguageId, @SecondaryLanguageSymbol = SecondaryLanguageSymbol FROM [dbo].[Settings] WHERE TenantId = @TenantId -- Set the User Id EXEC sp_set_session_context @key=N'UserId', @value=@UserId; -- Return the user information SELECT @UserId AS userId, @ExternalId AS ExternalId, @Email AS Email, @SettingsVersion AS SettingsVersion, @PermissionsVersion AS PermissionsVersion, @UserSettingsVersion AS UserSettingsVersion, @ViewsAndSpecsVersion AS ViewsAndSpecsVersion, @PrimaryLanguageId AS PrimaryLanguageId, @PrimaryLanguageSymbol AS PrimaryLanguageSymbol, @SecondaryLanguageId AS SecondaryLanguageId, @SecondaryLanguageSymbol AS SecondaryLanguageSymbol; "; cmd.Parameters.AddWithValue("@TenantId", tenantId); cmd.Parameters.AddWithValue("@ExternalUserId", userService.GetUserId()); cmd.Parameters.AddWithValue("@UserEmail", userService.GetUserEmail()); cmd.Parameters.AddWithValue("@Culture", CultureInfo.CurrentUICulture.Name); cmd.Parameters.AddWithValue("@NeutralCulture", CultureInfo.CurrentUICulture.IsNeutralCulture ? CultureInfo.CurrentUICulture.Name : CultureInfo.CurrentUICulture.Parent.Name); sqlConnection.Open(); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) { int i = 0; var info = new TenantUserInfo { UserId = reader.IsDBNull(i) ? (int?)null : reader.GetInt32(i++), ExternalId = reader.IsDBNull(i) ? null : reader.GetString(i++), Email = reader.IsDBNull(i) ? null : reader.GetString(i++), SettingsVersion = reader.IsDBNull(i) ? null : reader.GetGuid(i++).ToString(), PermissionsVersion = reader.IsDBNull(i) ? null : reader.GetGuid(i++).ToString(), UserSettingsVersion = reader.IsDBNull(i) ? null : reader.GetGuid(i++).ToString(), ViewsAndSpecsVersion = reader.IsDBNull(i) ? null : reader.GetGuid(i++).ToString(), PrimaryLanguageId = reader.IsDBNull(i) ? null : reader.GetString(i++), PrimaryLanguageSymbol = reader.IsDBNull(i) ? null : reader.GetString(i++), SecondaryLanguageId = reader.IsDBNull(i) ? null : reader.GetString(i++), SecondaryLanguageSymbol = reader.IsDBNull(i) ? null : reader.GetString(i++), }; // Provide the user throughout the current session accessor.SetInfo(tenantId, info); } else { throw new Controllers.Misc.BadRequestException("Something went wrong while querying the user ID from the Database"); } } // Prepare the options based on the connection created with the shard manager optionsBuilder = optionsBuilder.UseSqlServer(sqlConnection); } return(optionsBuilder .ReplaceService <IMigrationsSqlGenerator, CustomSqlServerMigrationsSqlGenerator>() .Options); }
// Constructor public ApplicationContext(IShardResolver shardProvider, ITenantIdProvider tenantIdProvider, IUserProvider userIdProvider, ITenantUserInfoAccessor accessor) : base(CreateDbContextOptions(shardProvider, tenantIdProvider, userIdProvider, accessor)) { _tenantIdProvider = tenantIdProvider; }
/// <summary> /// Returns the internal user Id of the currently signed in user according to the tenant database /// </summary> public static int UserId(this ITenantUserInfoAccessor @this) { return(@this.GetCurrentInfo().UserId.Value); }
public FilterParser(ITenantUserInfoAccessor info) { _info = info; }