Конфигурация ЛК состоит из трех файлов, расположенных в папке WEB-INF: основного файла конфигурации конфигурации mybgbilling-conf.groovy, файла конфигурации меню меню mybgbilling-menu.groovy, файла конфигурации платежных систем систем mybgbilling-payment.groovy. Файлы конфигурации созданы с использованием синтаксиса Groovy. Значение синтаксиса Groovy.
Описание синтаксиса
Группы параметров в конфиге разделяются не точкой, а с помощью вложенных блоков. Значение параметра должно быть правильным Groovy/Java-объектом - в простом случае строкой, заключенной в одинарные или двойные кавычки, или числом. Группы параметров разделяются не точкой, а с помощью вложенных блоков, например:
Блок кода |
---|
|
one {
two {
parameterA = 'value1'
three {
parameterA = 'value2'
parameterB = 100
}
}
} |
Т.е. параметр конфигурации - это один или несколько вложенных блоков, имя параметра и значение после знака =. Данный пример в конфигурации модулей биллинга выглядел бы так:
...
Блок кода |
---|
|
example {
map = [
key: 'value',
key2:value 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.*" ) } |