20 сентября, 2015 | 4 Комментариев Откомментить в дискуссии
Наступивший конец лета не оставил равнодушными, ведь цены на путёвки существенно падают, а пляжи пусты от туристов, восстановивших нервы и готовых к новому рывку к высотам в офисах.

Читать полностью »
17 мая, 2015 | Нет комментариев
Отличный фреймворк, но настраивать ACL в нём просто АДЪ(если не знать хитрость)
Единственный разумный способ сделать это занятие приятным — запуск специального DEBUG режима.
1. Для запуска проекта из текущей директории в режиме отладки ACL нужно сделать:
DEBUG=loopback:security:* node . |
DEBUG=loopback:security:* node .
2. Выполните REST запрос, который пытаетесь задебажить. Допустим, нас интересует
Request URL:http://eventovka.dev/api/BaseUsers/55575aa2f2e0436f0defcdc8/events
Request Method:POST |
Request URL:http://eventovka.dev/api/BaseUsers/55575aa2f2e0436f0defcdc8/events
Request Method:POST
3. Ответом(в консоле браузера) должно быть что-то вида:
Status Code:401 Unauthorized
{"error":{"name":"Error","status":401,"message":"Authorization Required","statusCode":401,"code":"AUTHORIZATION_REQUIRED","stack":"Error: Authorization Required\n at /srv/eventovka/api/node_modules/loopback/lib/application.js:348:21\n at /srv/eventovka/api/node_modules/loopback/lib/model.js:313:7\n at /srv/eventovka/api/node_modules/loopback/common/models/acl.js:465:23\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:254:17\n at done (/srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:135:19)\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:32:16\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:251:21\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:575:34\n at /srv/eventovka/api/node_modules/loopback/common/models/acl.js:447:17\n at /srv/eventovka/api/node_modules/loopback/common/models/role.js:290:23"}} |
Status Code:401 Unauthorized
{"error":{"name":"Error","status":401,"message":"Authorization Required","statusCode":401,"code":"AUTHORIZATION_REQUIRED","stack":"Error: Authorization Required\n at /srv/eventovka/api/node_modules/loopback/lib/application.js:348:21\n at /srv/eventovka/api/node_modules/loopback/lib/model.js:313:7\n at /srv/eventovka/api/node_modules/loopback/common/models/acl.js:465:23\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:254:17\n at done (/srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:135:19)\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:32:16\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:251:21\n at /srv/eventovka/api/node_modules/loopback/node_modules/async/lib/async.js:575:34\n at /srv/eventovka/api/node_modules/loopback/common/models/acl.js:447:17\n at /srv/eventovka/api/node_modules/loopback/common/models/role.js:290:23"}}
4. В логе сервер должно быть что-то вида:
loopback:security:acl The following ACLs were searched: +1ms
loopback:security:acl ---ACL--- +1ms
loopback:security:acl model BaseUser +0ms
loopback:security:acl property * +0ms
loopback:security:acl principalType ROLE +1ms
loopback:security:acl principalId $everyone +0ms
loopback:security:acl accessType * +0ms
loopback:security:acl permission DENY +0ms
loopback:security:acl with score: +0ms 7495
loopback:security:acl ---ACL--- +0ms
loopback:security:acl model BaseUser +0ms
loopback:security:acl property * +3ms
loopback:security:acl principalType ROLE +0ms
loopback:security:acl principalId $everyone +0ms
loopback:security:acl accessType * +1ms
loopback:security:acl permission DENY +0ms
loopback:security:acl with score: +0ms 7495
loopback:security:acl ---Resolved--- +1ms
loopback:security:access-context ---AccessRequest--- +0ms
loopback:security:access-context model BaseUser +0ms
loopback:security:access-context property __create__events +1ms
loopback:security:access-context accessType WRITE +0ms
loopback:security:access-context permission DENY +0ms
loopback:security:access-context isWildcard() false +0ms
loopback:security:access-context isAllowed() false +0ms |
loopback:security:acl The following ACLs were searched: +1ms
loopback:security:acl ---ACL--- +1ms
loopback:security:acl model BaseUser +0ms
loopback:security:acl property * +0ms
loopback:security:acl principalType ROLE +1ms
loopback:security:acl principalId $everyone +0ms
loopback:security:acl accessType * +0ms
loopback:security:acl permission DENY +0ms
loopback:security:acl with score: +0ms 7495
loopback:security:acl ---ACL--- +0ms
loopback:security:acl model BaseUser +0ms
loopback:security:acl property * +3ms
loopback:security:acl principalType ROLE +0ms
loopback:security:acl principalId $everyone +0ms
loopback:security:acl accessType * +1ms
loopback:security:acl permission DENY +0ms
loopback:security:acl with score: +0ms 7495
loopback:security:acl ---Resolved--- +1ms
loopback:security:access-context ---AccessRequest--- +0ms
loopback:security:access-context model BaseUser +0ms
loopback:security:access-context property __create__events +1ms
loopback:security:access-context accessType WRITE +0ms
loopback:security:access-context permission DENY +0ms
loopback:security:access-context isWildcard() false +0ms
loopback:security:access-context isAllowed() false +0ms
6. Нас интересует, вызванная модель и её атрибут(метод). В логе они фигугируют как model и property.
Таким образом нам нужно настроить
model: BaseUser
property: __create__events |
model: BaseUser
property: __create__events
7. Добавляем необходимое ACL условие в json конфиг модели:
{
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW",
"property": "__create__events"
} |
{
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW",
"property": "__create__events"
}
Результат должен выглядеть примерно так(нижнее условие):

15 марта, 2015 | Нет комментариев

Книга «Джон Богл. Руководство разумного инвестора» достаточна интересна, прагматична.
Сразу доносится мысль, что можно рассчитывать на разумный доход, а не сверхдоход. А разумный доход формируется снижением издержек(комиссий) и диверсификацией инструментов.
По мере развития становится понятно, что это индексы, т.к. отражают реальный рост рынка.
Идея подтверждается статистикой, рассчётами и.т.д.
2 марта, 2015 | Нет комментариев
28 февраля, 2015 | Нет комментариев
10 января, 2015 | 2 Комментариев Откомментить в дискуссии
2014 был сложным, но нам не привыкать, 2015 будет ещё сложнее!
В профессиональном плане:
1. Сменил работу. Работал PHP Backend разработчиком, теперь почти Full Stack Web разработчик (кроме вёрстки).
2. Углубился в AngularJS, SPA Web приложения — правильный вектор развития.
3. Сменил backend язык на NodeJS.
4. Разобрался с Vagrant, теперь не представляю, как без него жить.
5. Разобрался с Ansible, использую в комплекте с Vagrant и провизионирую prod.
Личное:
Купил квартиру. Съездил с семьёй во Вьетнам.
Планы на 2015:
В 2015 хочу запустить 2 интернет проекта и вывести их в прибыль.
9 января, 2015 | Нет комментариев
Внезапно в конце декабря подвернулась возможность выехать. Цены на путёвки сильно упали из-за небольшой паники, вызванной ростом рубля. Из-за этого люблю негативные новости и паники 🙂
Т.к. у нас баксы были заблаговременно заготовлены, это позволило абстрагироваться от курса рубля.
Ня-Чанг красив, живописен, но посещать второй раз уже бы не стал.
У нас был плотный график. Всего 1 день был свободен для шопинга, а все остальные были заполнены экскурсиями.
Из негативного: тур-оператор (Anex Tour) сработал из рук вон плохо. По прибытию нам без согласования заменили гостиницу на существенно худшую, отельный гид весьма надменно провёл встречу, и двое суток не мог дать ответ на вопрос, что же с нашим новогодним ужином. В заключение, по выселению нас забыли включить в трансфер, пришлось связываться по горячей линии с представителями тур-оператора. По всем этим делам написал претензию тур-агентству, посмотрим чем закончится.

Читать полностью »
4 октября, 2014 | Нет комментариев
Node.js loopback, как отличный инструмент для разворачивания RESTful бекендов:
Мастер-класс по подготовке RESTful API с нуля за пол часа:
источники данных, модели, связи, ACL, API explorer, сервис для AngularJS.