Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 6 Следующий »

Конфигурация ЛК состоит из трех файлов, расположенных в папке WEB-INF: основного файла конфигурации mybgbilling-conf.groovy, файла конфигурации меню mybgbilling-menu.groovy, файла конфигурации платежных систем mybgbilling-payment.groovy. Файлы конфигурации созданы с использованием синтаксиса Groovy.

Описание синтаксиса

Группы параметров в конфиге разделяются не точкой, а с помощью вложенных блоков. Значение параметра должно быть правильным Groovy/Java-объектом - в простом случае строкой, заключенной в одинарные или двойные кавычки, или числом, например:

one {
	two {
		parameterA = 'value1'
		three {
			parameterA = 'value2'
			parameterB = 100
		}
	}
}

Т.е. параметр конфигурации - это один или несколько вложенных блоков, имя параметра и значение после знака =. Данный пример в конфигурации модулей биллинга выглядел бы так:

one.two.parameterA=value1
one.two.three.parameterA=value2
one.two.three.parameterB=100

Некоторые значения параметров должны быть списками или массивами определенных объектов. Объекты списка заключены в квадратные скобки [] и разделены между собой символом запятой. Например:

authentication {

    modes = [
    	authenticationMode {
 			mode = 'contract'
    	}, 
 
    	authenticationMode {
     		mode = 'login'
     		module = 'inet'
     		moduleId = 1
     	}
    ]
}

Некоторые значения параметров могут быть ассоциативными массивами (список ключ:значение, map). Связки ключ:значение заключены в квадратные скобки [] и разделены между собой символом запятой. Например:

example {
    map = [
    	key: 'value',
    	key2: 200
    ]
}

Также параметры могут быть прописаны как ассоциативный массив, заключенный в круглые скобки (значение в этом случае прописывается через ':' (двеоточие), а не через символ '='):

authentication {

    modes = [
    	authenticationMode( mode: 'contract' ), 
    	authenticationMode( mode: 'login', module: 'inet', moduleId: 1 )
     	}
    ]
}

Некоторые значения могут быть динамическими, если использовать замыкания (closure). Т.е., грубо говоря, значением может быть функция, которая будет возвращать нужное значение:

status {
			// возможность изменения статуса договора
			//statusChange = { contract -> return contractInGroup( contract, [1, 2, 3, 4, 20] ) && isUserInRole( "customer" ); }
			//statusChange = { contract -> contractInGroup( contract, [1, 2, 3, 4, 20] ) && isUserInRole( "customer" ) }
			statusChange = { isUserInRole( "customer" ) }
}

В mybgbilling-conf.groovy и mybgbilling-menu.groovy в таких замыканиях можно использовать определенный набор методов, аргумент объект-contract, а также дополнительные аргументы, специфичные для определенного параметра конфигурации (например, параметры content.kernel.customerTitle и content.kernel.subContractGroup):

content {
	kernel {
		// название контрагента, отображаемое на странице
		customerTitle = { contract, contractParameterMap ->
		
			// ID параметров договоров названия физ. лиц (для customerTitle)
			def individualCustomerTitleParamIds = [0, 0, 0, 0, 0];
			// ID параметров договоров названия юр. лиц (для customerTitle)
			def corporationCustomerParamIds = [0, 0, 0, 0, 0];
	
			def paramIds = contract.personType == 1 ? corporationCustomerParamIds : individualCustomerTitleParamIds;
	
			String result = contractParameterMap.values().stream()
				.filter{ v -> paramIds.contains( v.entitySpecAttrId ) && notBlankString( v.toString() ) }
				.findFirst()
				.map{ v -> v.toString() }
				.orElse( null );
			
			// можно отобразить и просто комментарий договора
			//if( result == null ) {
			//	result = contract.comment;
			//}
			
			return result;
		}
	}
}

Основная конфигурация (mybgbilling-conf.groovy)

Основная конфигурация личного кабинета состоит из нескольких блоков:

  • bgbilling - конфигурация подключения к BGBillingServer,
  • authentication - параметры аутентификации абонента,
  • mail - параметры почтовой подсистемы (чтобы ЛК мог отправлять письма при необходимости),
  • content - параметры содержимого страниц.

Конфигурация подключения к BGBillingServer

// Параметры подключения к BGBillingServer.
// ЛК является пользователем биллинга, общается с ним также, как BGBillingClient
bgbilling {
    // URL доступа к BGBilling
    url = 'http://127.0.0.1:8080/bgbilling/executer'
    // Логин
    user = 'customer'
    // Пароль
    password = '123456'
}

Параметры аутентификации абонента

// Параметры аутентификации абонента
authentication {
    // Кол-во ошибок аутентификации, после которого будет отображаться captcha для этого логина
    captchaLoginErrorCount = 5
    // Кол-во ошибок аутентификации, после которого будет отображаться captcha для хоста
    captchaHostErrorCount = 20
    // Кол-во ошибок аутентификации, после которых будут заблокированы попытки этого хоста
    blockHostErrorCount = 30
    
    // Режимы аутентификации для входа в ЛК
    modes = [
		// аутентификация по номеру договора
    	authenticationMode {
 			mode = 'contract'
    	}
 	]
}

Режимов аутентификации может быть несколько - в этом случае в окне логина можно выбрать необходимый. На данный момент поддерживаются три режима аутентификации:

  • по номеру договора

    authenticationMode {
    	mode = 'contract'
    }
  • по логину модуля Inet

    authenticationMode {
    	module = 'inet'
    	mode = 'login'
    	// ID модуля
    	moduleId = 1
    }
  • по IP-адресу сессии модуля Inet (вход без пароля)

    authenticationMode {
    	module = 'inet'
    	mode = 'ip'
    	// ID модуля
    	moduleId = 1
    	// ограниченный доступ
    	role = 'unauthCustomer'
    }

Для режима аутентификации можно назначить, чтобы доступ после аутентификации через него был ограничен. Для этого указывается параметр role = 'unauthCustomer'. В этом случае, вызов isUserInRole( "customer" ) будет возвращать false. Ограниченный доступ может быть указан, например, для режима аутентификации по IP-адресу модуля Inet.

Можно разрешить аутентификацию для определенных групп договоров, указав условие в параметре filter:

authenticationMode {
	module = 'inet'
	mode = 'ip'
	//ID модуля
	moduleId = 1
	// ограниченный доступ
	role = 'unauthCustomer'
    // фильтр по группам договоров
	filter = { contract -> contractInGroup( contract, [1, 2, 3, 4, 20] ) }
}

Или наоборот, запретить для определенных групп договоров:

	filter = { contract -> !contractInGroup( contract, [1, 2, 3, 4, 20] ) }

Или разрешить по номеру договора:

	filter = { contract -> contract.title.startsWith( "NK" ) }

Или использовать регулярное выражение:

	filter = { contract -> contract.title.matches( "NK.*" ) }

Параметры почтовой подсистемы

// Параметры SMTP, чтобы ЛК мог отправлять письма
mail {
	smtp {
		host = 'smtp.provider.ru'
	}
	
	from {
		email = 'support@provider.ru'
		name = 'BGBilling'
	}
}

Параметры содержимого страниц

Разрешенные фрагменты

Данный блок конфигурации позволяет настраивать, какие фрагменты страницы или какие действия доступны абонентам или группам абонентов. Например, в коде страницы статусов договора есть фрагмент смены статуса:

<ui:fragment rendered="#{configuration.get('content.kernel.status.statusChange', true)}">
	...
</ui:fragment>

Соответственно можно в конфигурации запретить всем менять статус договора из личного кабинета:

content {
	kernel {
		...
	
		// status.xhtml
		status {
			// возможность изменения статуса договора
			statusChange = false
		}
		
		...
	}
	
	...
}

Можно разрешить только тем, кто был аутентифицирован по логину/паролю (в конфигурации по умолчанию установлен этот вариант):

statusChange = { isUserInRole( "customer" ) }

Разрешить только аутентифицированным по логину/паролю физ. лицам:

statusChange = { contract -> isUserInRole( "customer" ) && contract.getPersonType() == 0 }

Или разрешить только аутентифицированным по логину/паролю определенным группам договоров:

statusChange = { contract -> isUserInRole( "customer" ) && contractInGroup( contract, [1, 2, 3, 4, 20] ) }

Название контрагента в верхней части страницы

По умолчанию в шапке страницы название или имя контрагента не отображается. В конфигурации можно указать, 

Группировка субдоговоров в меню

 

  • Нет меток