public RoleManagerController(RoleManager <IdentityRole> roleManager, PolicyRolesDbContext context, IOptionsSnapshot <Settings> settings)
 {
     _roleManager        = roleManager;
     _policyRolesContext = context;
     _settings           = settings.Value;
 }
예제 #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.Configure <Settings>(Configuration.GetSection("TestApp:Settings"));
            services.AddAzureAppConfiguration();
            services.AddRazorPages();

            services.AddDbContext <FagElGamousContext>(options =>
                                                       options.UseSqlServer(Configuration["ConnectionStrings:FagElGamousIdentityConnection"]));

            services.AddDbContext <PolicyRolesDbContext>(options =>
                                                         options.UseSqlServer(Configuration["ConnectionStrings:PolicyRolesDbConnection"]));

            services.AddDbContext <BYUExcavationDbContext>(options =>
                                                           options.UseSqlServer(Configuration["ConnectionStrings:BYUExcavationDbConnection"]));

            services.AddAuthentication()
            .AddGoogle(googleOptions =>
            {
                IConfigurationSection googleAuthNSection =
                    Configuration.GetSection("Authentication:Google");

                googleOptions.ClientId     = googleAuthNSection["ClientId"];
                googleOptions.ClientSecret = googleAuthNSection["ClientSecret"];
            })
            .AddFacebook(facebookOptions =>
            {
                facebookOptions.AppId     = Configuration["Authentication:Facebook:AppId"];
                facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
            })
            .AddMicrosoftAccount(microsoftOptions =>
            {
                microsoftOptions.ClientId     = Configuration["Authentication:Microsoft:ClientId"];
                microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
            })
            .AddTwitter(twitterOptions =>
            {
                twitterOptions.ConsumerKey         = Configuration["Authentication:Twitter:ConsumerAPIKey"];
                twitterOptions.ConsumerSecret      = Configuration["Authentication:Twitter:ConsumerSecret"];
                twitterOptions.RetrieveUserDetails = true;
            })
            .AddGitHub(githubOptions =>
            {
                githubOptions.ClientId     = Configuration["Authentication:GitHub:ClientID"];
                githubOptions.ClientSecret = Configuration["Authentication:GitHub:SecretID"];
            });

            PolicyRolesDbContext context = services.BuildServiceProvider().GetService <PolicyRolesDbContext>();

            if (context.WriteRoles.Any())
            {
                services.AddAuthorization(options =>
                {
                    options.AddPolicy("writepolicy",
                                      builder => builder.RequireRole(Policy.GetWriteRoles(context)));
                });
            }
            else
            {
                context.WriteRoles.Add(new WriteRole {
                    Role = "Admin"
                });
                context.SaveChanges();
                services.AddAuthorization(options =>
                {
                    options.AddPolicy("writepolicy",
                                      builder => builder.RequireRole(Policy.GetWriteRoles(context)));
                });
            }
            if (context.DeleteRoles.Any())
            {
                services.AddAuthorization(options =>
                {
                    options.AddPolicy("deletepolicy",
                                      builder => builder.RequireRole(Policy.GetDeleteRoles(context)));
                });
            }
            else
            {
                context.DeleteRoles.Add(new DeleteRole {
                    Role = "Admin"
                });
                context.SaveChanges();
                services.AddAuthorization(options =>
                {
                    options.AddPolicy("deletepolicy",
                                      builder => builder.RequireRole(Policy.GetDeleteRoles(context)));
                });
            }

            services.AddTransient <IEmailSender, EmailSender>();
            services.Configure <AuthMessageSenderOptions>(Configuration);
        }