コード例 #1
0
        public void Init()
        {
            var connectionString = ConfigurationHelper.GetConnectionString(true);

            var services = new ServiceCollection();

            services.AddTransient(typeof(IMultiTenantUserClaimStore <User, long>), typeof(MultiTenantUserClaimStore <User, Role, long, long>));
            services.AddTransient(typeof(IMultiTenantUserRoleStore <User, long>), typeof(MultiTenantUserRoleStore <User, Role, long, long>));

            var builder = services.AddIdentity <User, Role>()
                          .AddEntityFrameworkStores <MultiTenantIamDbContext <User, Role, long, long> >()
                          .AddDefaultTokenProviders();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = "Bearer";
                options.DefaultChallengeScheme    = "Bearer";
            });

            services.AddAuthorization();

            services.AddMultiTenantIamCore <long>();

            services.AddDbContext <MultiTenantIamDbContext <User, Role, long, long> >(options =>
                                                                                      options.UseSqlServer(connectionString));

            serviceProvider = services.BuildServiceProvider();

            using (var scope = serviceProvider.CreateScope())
            {
                var dbContext = scope.ServiceProvider.GetRequiredService(typeof(MultiTenantIamDbContext <User, Role, long, long>)) as MultiTenantIamDbContext <User, Role, long, long>;

                dbContext.Database.EnsureCreated();

                new Checkpoint().Reset(connectionString).Wait();
            }

            userManager = serviceProvider.GetRequiredService(typeof(UserManager <User>)) as UserManager <User>;
            claimStore  = serviceProvider.GetRequiredService(typeof(IMultiTenantUserClaimStore <User, long>)) as IMultiTenantUserClaimStore <User, long>;
            roleStore   = serviceProvider.GetRequiredService(typeof(IMultiTenantUserRoleStore <User, long>)) as IMultiTenantUserRoleStore <User, long>;

            var roleManager = serviceProvider.GetRequiredService(typeof(RoleManager <Role>)) as RoleManager <Role>;

            roleManager.CreateAsync(new Role()
            {
                Name = "admin"
            }).Wait();

            roleManager.CreateAsync(new Role()
            {
                Name = "manager"
            }).Wait();

            userManager.CreateAsync(new User()
            {
                UserName = "******",
            }).Wait();

            user = userManager.FindByNameAsync("test").Result;
        }
コード例 #2
0
 public IamMultiTenantUserClaimsPrincipalFactory(UserManager <TUser> userManager, RoleManager <TRole> roleManager, IMultiTenantUserClaimStore <TUser, TTenantKey> userClaimStore, IMultiTenantUserRoleStore <TUser, TTenantKey> roleStore, IMultiTenantRoleClaimStore <TRole, TTenantKey> roleClaimStore, IOptions <IdentityOptions> identityOptions) : base(userManager, identityOptions)
 {
     _userManager    = userManager;
     _roleManager    = roleManager;
     _userClaimStore = userClaimStore;
     _roleStore      = roleStore;
     _roleClaimStore = roleClaimStore;
 }
        public void Init()
        {
            var services = new ServiceCollection();

            services.AddTransient(typeof(IMultiTenantUserClaimStore <User, long>), typeof(MemoryMultiTenantStore <User, Role, long, long>));
            services.AddTransient(typeof(IMultiTenantUserRoleStore <User, long>), typeof(MemoryMultiTenantStore <User, Role, long, long>));

            var builder = services.AddIdentity <User, Role>()
                          .AddEntityFrameworkStores <IdentityDbContext <User, Role, long> >()
                          .AddDefaultTokenProviders();

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = "Bearer";
                options.DefaultChallengeScheme    = "Bearer";
            });

            services.AddAuthorization();

            services.AddMultiTenantIamCore <long>();

            services.AddDbContext <IdentityDbContext <User, Role, long> >(options =>
                                                                          options.UseInMemoryDatabase("test"));

            serviceProvider = services.BuildServiceProvider();

            userManager = serviceProvider.GetRequiredService(typeof(UserManager <User>)) as UserManager <User>;
            claimStore  = serviceProvider.GetRequiredService(typeof(IMultiTenantUserClaimStore <User, long>)) as IMultiTenantUserClaimStore <User, long>;
            roleStore   = serviceProvider.GetRequiredService(typeof(IMultiTenantUserRoleStore <User, long>)) as IMultiTenantUserRoleStore <User, long>;

            userManager.CreateAsync(new User()
            {
                UserName = "******",
            }).Wait();

            user = userManager.FindByNameAsync("test").Result;
        }
コード例 #4
0
        private static void AddClaimsMt(string userName, long[] tenantIds, string[] claims, UserManager <User> userManager, IMultiTenantUserClaimStore <User, long> store)
        {
            var user = userManager.FindByNameAsync(userName).Result;

            foreach (var tenantId in tenantIds)
            {
                if (!userManager.AttachPoliciesAsync <User, long>(store, user, tenantId, claims).Result.Succeeded)
                {
                    throw new Exception("Couldn't add claims to user");
                }
            }
        }
コード例 #5
0
        private static void AddResourceIdAccessMt(string userName, string[] policies, long[] tenantIds, UserManager <User> userManager, IMultiTenantUserClaimStore <User, long> claimStore, bool hasAccessToAll, params long[] resourceIds)
        {
            var user = userManager.FindByNameAsync(userName).Result;

            foreach (var policy in policies)
            {
                foreach (var tenantId in tenantIds)
                {
                    if (hasAccessToAll)
                    {
                        userManager.GrantAccessToAllResources <User, long>(claimStore, user, tenantId, policy).Wait();
                    }
                    else
                    {
                        userManager.GrantAccessToResources <User, long, long>(claimStore, user, tenantId, policy, resourceIds).Wait();
                    }
                }
            }
        }