четверг, 4 декабря 2014 г.

AngularJS + UI Rrouter: проверка авторизации и прав доступа

Если ваше приложение предполагает авторизацию пользователей и/или проверку прав доступа, то вам придется либо изобретать велосипед, либо гуглить в поисках подходящего решения. В принципе, я тоже это делал. В итоге я принял приемлемым для себя описанный ниже вариант.

Информацию об авторизованном пользователе я решил хранить в sessionStorage, копируя её при запуске приложения в $rootScope. Также по рекомендации авторов UI Router я храню в $rootScope значения объекты $state и $stateParam, для удобного доступа. Информацию же о доступе к тому или иному состоянию можно передавать через блок data при описании самого состояния. Поскольку в моем приложении везде закрыт доступ, я решил идти от обратного и добавлять значение noLogin = true для состояний, которые не требуют авторизации, например страницы ввода логина, восстановления пароля или регистрации.
angular.module('myApp.auth', [
    'ui.router'
  ])
  .config(['$stateProvider', '$urlRouterProvider',
    function ($stateProvider, $urlRouterProvider) {

      $stateProvider
        .state('auth', {
          url: '/auth',
          abstract: true,
          template: ''
        })

      .state('auth.login', {
        url: '/login',
        templateUrl: 'src/auth/partials/login.html', 
        data: {
          'noLogin': true
        }
      });
  ]);

четверг, 22 декабря 2011 г.

JavaScript: URL-декодирование и массив GET

Понадобились в работе аналоги функций PHP urlencode() и urldecode() для JavaScrip. Немного погуглив, понял, что люди конструируют различные велосипеды, хотя мне казалось, что должен быть простой путь. Так и оказалось. В JavaScript есть пара аналогичных функций: encodeURIComponent() и decodeURIComponent().

И в придачу, чтобы не забыть, функция для преобразования URL-строки в ассоциативный массив, аналог $_GET в PHP.
function getUrlVars()  
{  
    var vars = {}, hash;  
    var hashes = decodeURIComponent(window.location.href)
                   .slice(window.location.href.indexOf('?') + 1).split('&');  
  
    for(var i = 0; i < hashes.length; i++)  
    {  
        hash = hashes[i].split('=');  
        vars[hash[0]] = hash[1];  
    }  
  
    return vars;  
}      

// использование
_get = getUrlVars();
a = _get['a'];

четверг, 24 ноября 2011 г.

JavaScript: замена подстроки

Известно, что для замены подстроки в JavaScripte используется метод replace, который работает с регулярным выражением в первом параметре. Сегодня нашел другой способ замены подстроки и даже утверждается, что он работает быстрее регулярных выражений. Естественно, речь идет о простых условиях поиска и замене одного вхождения.
sampleString = "Это просто строка для примера";
search = "просто строка";
replace = "короткая строка";

sampleString.split(search).join(replace);

В итоге мы получим строку "Это короткая строка для примера".

среда, 23 ноября 2011 г.

PHP: сортировка массива по длине элементов

В оригинале, функция usort() принимает вторым параметром имя callback-функции. Но в PHP 5.3 удобнее использовать замыкание, особенно если сортировка используется, например, в методе какого-либо класса.
$arr = array('aaaaaaa', 'bbbb', 'cccc', 'dd', 'eeeee', 'fff');

print_r($arr);

usort($arr,
        function($a, $b) {
            return ($a == $b) ? 0 :
                ((strlen($a) < strlen($b)) ? -1 : 1);
        });

print_r($arr);


вторник, 4 октября 2011 г.

Интеграция Zend_Tool в NetBeans

Zend_Tool - замечательный инструмент в составе Zend Framework. В интернетах пишут, что он еще не такой совершенный, как подобные утилиты у конкурирующих фреймворков, но я думаю, что лучше что-то, чем ничего. Утилита представляет собой файл zf.sh в Linux или zf.bat в Windows. Для ее работы надо, чтобы путь к интерпретатору PHP был указан в системной переменной PATH. Для удобства я там же указываю и путь к самой утилите: тогда ее можно вызывать из любого места.

Интерфейс командной строки вещь хорошая - как говорится, feel power at the fingertips. Но не менее удобно иметь такой же функционал в любимой IDE'шке. Кстати говоря, он реализован в Zend Studio - прожорливой и не очень бесплатной, хотя и мощной среде разработки. А для любителей NetBeans разработчики предлагают возможность интегрировать утилиту командной строки в IDE. Когда я ее попробовал активировать, все оказалось неочевидно, хотя и довольно просто, надо было  какое-то время погуглить и поэкспериментировать.

Итак, что нужно, чтобы все работало (под Windows 7 в моем случае):