Beispiel #1
0
        public static IServiceCollection AddAccessControl <TSecurityManager>(
            this IServiceCollection services,
            Action <SecurityAccessorBuilder> builder)
            where TSecurityManager : class, ISecurityManager
        {
            var configuration = new SecurityAccessorBuilder();

            builder(configuration);

            if (configuration.AccessorFactory == null)
            {
                throw new NullReferenceException("Не задана фабрика аксессоров доступа");
            }

            if (configuration.EventFactory == null)
            {
                throw new NullReferenceException("Не задана фабрика эвентов проверки прав");
            }

            services.AddScoped(typeof(IAccessorFactory), configuration.AccessorFactory);
            services.AddScoped(typeof(IAccessEventFactory), configuration.EventFactory);

            services.AddScoped <ISecurityManager, TSecurityManager>();

            var accessorBuilders = configuration.AccessorBuilders;

            //TODO Реализовать хэндлеры через контейнеры

            foreach (var accessorBuilder in accessorBuilders)
            {
                services.AddTransient(accessorBuilder.AccessorType, accessorBuilder.BuildAccessor);
            }

            return(services);
        }
Beispiel #2
0
        private static SecurityAccessorBuilder AddAdminAccessControl(this SecurityAccessorBuilder builder)
        {
            builder.AddAccessor <AdminAccessor>(paramsBuilder =>
                                                { }, (sp, dict) =>
            {
                var accessor = new AdminAccessor(sp, dict);
                return(accessor);
            });

            return(builder);
        }
Beispiel #3
0
        private static SecurityAccessorBuilder AddEducationalInstitutionAccessControl(
            this SecurityAccessorBuilder builder)
        {
            builder.AddAccessor <EducationalInstitutionManagerAccessor>(paramsBuilder =>
                                                                        { }, (sp, dict) =>
            {
                var accessor = new EducationalInstitutionManagerAccessor(sp, dict);
                return(accessor);
            });

            return(builder);
        }
Beispiel #4
0
        private static SecurityAccessorBuilder AddApplicantAccessControl(this SecurityAccessorBuilder builder)
        {
            builder.AddAccessor <ApplicantAccessor>(paramsBuilder =>
            {
                paramsBuilder.RegisterHandler <ApplicantAccessEvent <Resume>, ApplicantResumeAccessHandler, Resume>();
            }, (sp, dict) =>
            {
                var accessor = new ApplicantAccessor(sp, dict);
                return(accessor);
            });

            return(builder);
        }
Beispiel #5
0
        private static SecurityAccessorBuilder AddEmployerAccessControl(
            this SecurityAccessorBuilder builder)
        {
            builder.AddAccessor <EmployerManagerAccessor>(paramsBuilder =>
            {
                paramsBuilder.RegisterHandler <
                    EmployerAccessEvent <ResumeNegotiation>,
                    EmployerNegotiationAccessHandler,
                    ResumeNegotiation>();
            }, (sp, dict) =>
            {
                var accessor = new EmployerManagerAccessor(sp, dict);
                return(accessor);
            });

            return(builder);
        }