diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8948c33
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,27 @@
+# phpstorm project files
+.idea
+
+# netbeans project files
+nbproject
+
+# zend studio for eclipse project files
+.buildpath
+.project
+.settings
+
+# windows thumbnail cache
+Thumbs.db
+
+# composer vendor dir
+/vendor
+
+# composer itself is not needed
+composer.phar
+
+# Mac DS_Store Files
+.DS_Store
+
+# phpunit itself is not needed
+phpunit.phar
+# local phpunit config
+/phpunit.xml
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 820ad9d..a72127c 100644
--- a/composer.json
+++ b/composer.json
@@ -17,9 +17,13 @@
"require": {
"yiisoft/yii2": "*"
},
+ "require-dev": {
+ "phpunit/phpunit": "~5.1",
+ "phpunit/dbunit": "~2.0"
+ },
"autoload": {
"psr-4": {
- "arogachev\\rbac\\": ""
+ "arogachev\\rbac\\": "src"
}
}
}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..9e57980
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,1508 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "05b12d17b2b33b6de35172405d13182e",
+ "content-hash": "2fe942354bcd00b510db845a35dc16b5",
+ "packages": [
+ {
+ "name": "bower-asset/jquery",
+ "version": "2.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jquery/jquery.git",
+ "reference": "7751e69b615c6eca6f783a81e292a55725af6b85"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jquery/jquery/zipball/7751e69b615c6eca6f783a81e292a55725af6b85",
+ "reference": "7751e69b615c6eca6f783a81e292a55725af6b85",
+ "shasum": ""
+ },
+ "require-dev": {
+ "bower-asset/qunit": "1.14.0",
+ "bower-asset/requirejs": "2.1.10",
+ "bower-asset/sinon": "1.8.1",
+ "bower-asset/sizzle": "2.1.1-patch2"
+ },
+ "type": "bower-asset-library",
+ "extra": {
+ "bower-asset-main": "dist/jquery.js",
+ "bower-asset-ignore": [
+ "**/.*",
+ "build",
+ "dist/cdn",
+ "speed",
+ "test",
+ "*.md",
+ "AUTHORS.txt",
+ "Gruntfile.js",
+ "package.json"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "keywords": [
+ "javascript",
+ "jquery",
+ "library"
+ ]
+ },
+ {
+ "name": "bower-asset/jquery.inputmask",
+ "version": "3.1.63",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/RobinHerbots/jquery.inputmask.git",
+ "reference": "c40c7287eadc31e341ebbf0c02352eb55b9cbc48"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/RobinHerbots/jquery.inputmask/zipball/c40c7287eadc31e341ebbf0c02352eb55b9cbc48",
+ "reference": "c40c7287eadc31e341ebbf0c02352eb55b9cbc48",
+ "shasum": ""
+ },
+ "require": {
+ "bower-asset/jquery": ">=1.7"
+ },
+ "type": "bower-asset-library",
+ "extra": {
+ "bower-asset-main": [
+ "./dist/inputmask/jquery.inputmask.js",
+ "./dist/inputmask/jquery.inputmask.extensions.js",
+ "./dist/inputmask/jquery.inputmask.date.extensions.js",
+ "./dist/inputmask/jquery.inputmask.numeric.extensions.js",
+ "./dist/inputmask/jquery.inputmask.phone.extensions.js",
+ "./dist/inputmask/jquery.inputmask.regex.extensions.js"
+ ],
+ "bower-asset-ignore": [
+ "**/.*",
+ "qunit/",
+ "nuget/",
+ "tools/",
+ "js/",
+ "*.md",
+ "build.properties",
+ "build.xml",
+ "jquery.inputmask.jquery.json"
+ ]
+ },
+ "license": [
+ "http://opensource.org/licenses/mit-license.php"
+ ],
+ "description": "jquery.inputmask is a jquery plugin which create an input mask.",
+ "keywords": [
+ "form",
+ "input",
+ "inputmask",
+ "jquery",
+ "mask",
+ "plugins"
+ ]
+ },
+ {
+ "name": "bower-asset/punycode",
+ "version": "v1.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bestiejs/punycode.js.git",
+ "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3",
+ "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
+ "shasum": ""
+ },
+ "type": "bower-asset-library",
+ "extra": {
+ "bower-asset-main": "punycode.js",
+ "bower-asset-ignore": [
+ "coverage",
+ "tests",
+ ".*",
+ "component.json",
+ "Gruntfile.js",
+ "node_modules",
+ "package.json"
+ ]
+ }
+ },
+ {
+ "name": "bower-asset/yii2-pjax",
+ "version": "v2.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yiisoft/jquery-pjax.git",
+ "reference": "6818718408086db6bdcf33649cecb86b6b4f9b67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/6818718408086db6bdcf33649cecb86b6b4f9b67",
+ "reference": "6818718408086db6bdcf33649cecb86b6b4f9b67",
+ "shasum": ""
+ },
+ "require": {
+ "bower-asset/jquery": ">=1.8"
+ },
+ "type": "bower-asset-library",
+ "extra": {
+ "bower-asset-main": "./jquery.pjax.js",
+ "bower-asset-ignore": [
+ ".travis.yml",
+ "Gemfile",
+ "Gemfile.lock",
+ "vendor/",
+ "script/",
+ "test/"
+ ]
+ },
+ "license": [
+ "MIT"
+ ]
+ },
+ {
+ "name": "cebe/markdown",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cebe/markdown.git",
+ "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cebe/markdown/zipball/54a2c49de31cc44e864ebf0500a35ef21d0010b2",
+ "reference": "54a2c49de31cc44e864ebf0500a35ef21d0010b2",
+ "shasum": ""
+ },
+ "require": {
+ "lib-pcre": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "cebe/indent": "*",
+ "facebook/xhprof": "*@dev",
+ "phpunit/phpunit": "4.1.*"
+ },
+ "bin": [
+ "bin/markdown"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "cebe\\markdown\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Carsten Brandt",
+ "email": "mail@cebe.cc",
+ "homepage": "http://cebe.cc/",
+ "role": "Creator"
+ }
+ ],
+ "description": "A super fast, highly extensible markdown parser for PHP",
+ "homepage": "https://github.com/cebe/markdown#readme",
+ "keywords": [
+ "extensible",
+ "fast",
+ "gfm",
+ "markdown",
+ "markdown-extra"
+ ],
+ "time": "2015-03-06 05:28:07"
+ },
+ {
+ "name": "ezyang/htmlpurifier",
+ "version": "v4.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezyang/htmlpurifier.git",
+ "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/6f389f0f25b90d0b495308efcfa073981177f0fd",
+ "reference": "6f389f0f25b90d0b495308efcfa073981177f0fd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "HTMLPurifier": "library/"
+ },
+ "files": [
+ "library/HTMLPurifier.composer.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL"
+ ],
+ "authors": [
+ {
+ "name": "Edward Z. Yang",
+ "email": "admin@htmlpurifier.org",
+ "homepage": "http://ezyang.com"
+ }
+ ],
+ "description": "Standards compliant HTML filter written in PHP",
+ "homepage": "http://htmlpurifier.org/",
+ "keywords": [
+ "html"
+ ],
+ "time": "2013-11-30 08:25:19"
+ },
+ {
+ "name": "yiisoft/yii2",
+ "version": "2.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yiisoft/yii2-framework.git",
+ "reference": "f42b2eb80f61992438661b01d0d74c6738e2ff38"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/f42b2eb80f61992438661b01d0d74c6738e2ff38",
+ "reference": "f42b2eb80f61992438661b01d0d74c6738e2ff38",
+ "shasum": ""
+ },
+ "require": {
+ "bower-asset/jquery": "2.1.*@stable | 1.11.*@stable",
+ "bower-asset/jquery.inputmask": "3.1.*",
+ "bower-asset/punycode": "1.3.*",
+ "bower-asset/yii2-pjax": ">=2.0.1",
+ "cebe/markdown": "~1.0.0 | ~1.1.0",
+ "ext-mbstring": "*",
+ "ezyang/htmlpurifier": "4.6.*",
+ "lib-pcre": "*",
+ "php": ">=5.4.0",
+ "yiisoft/yii2-composer": "*"
+ },
+ "bin": [
+ "yii"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "yii\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Qiang Xue",
+ "email": "qiang.xue@gmail.com",
+ "homepage": "http://www.yiiframework.com/",
+ "role": "Founder and project lead"
+ },
+ {
+ "name": "Alexander Makarov",
+ "email": "sam@rmcreative.ru",
+ "homepage": "http://rmcreative.ru/",
+ "role": "Core framework development"
+ },
+ {
+ "name": "Maurizio Domba",
+ "homepage": "http://mdomba.info/",
+ "role": "Core framework development"
+ },
+ {
+ "name": "Carsten Brandt",
+ "email": "mail@cebe.cc",
+ "homepage": "http://cebe.cc/",
+ "role": "Core framework development"
+ },
+ {
+ "name": "Timur Ruziev",
+ "email": "resurtm@gmail.com",
+ "homepage": "http://resurtm.com/",
+ "role": "Core framework development"
+ },
+ {
+ "name": "Paul Klimov",
+ "email": "klimov.paul@gmail.com",
+ "role": "Core framework development"
+ }
+ ],
+ "description": "Yii PHP Framework Version 2",
+ "homepage": "http://www.yiiframework.com/",
+ "keywords": [
+ "framework",
+ "yii2"
+ ],
+ "time": "2015-08-05 22:00:30"
+ },
+ {
+ "name": "yiisoft/yii2-composer",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yiisoft/yii2-composer.git",
+ "reference": "ca8d23707ae47d20b0454e4b135c156f6da6d7be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/ca8d23707ae47d20b0454e4b135c156f6da6d7be",
+ "reference": "ca8d23707ae47d20b0454e4b135c156f6da6d7be",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "yii\\composer\\Plugin",
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "yii\\composer\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Qiang Xue",
+ "email": "qiang.xue@gmail.com"
+ }
+ ],
+ "description": "The composer plugin for Yii extension installer",
+ "keywords": [
+ "composer",
+ "extension installer",
+ "yii2"
+ ],
+ "time": "2015-03-01 06:22:44"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2015-06-14 21:17:01"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "e3abefcd7f106677fd352cd7c187d6c969aa9ddc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e3abefcd7f106677fd352cd7c187d6c969aa9ddc",
+ "reference": "e3abefcd7f106677fd352cd7c187d6c969aa9ddc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "doctrine/collections": "1.*",
+ "phpunit/phpunit": "~4.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "homepage": "https://github.com/myclabs/DeepCopy",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "time": "2015-11-07 22:20:37"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "phpDocumentor": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "time": "2015-02-03 12:10:50"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7",
+ "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "phpdocumentor/reflection-docblock": "~2.0",
+ "sebastian/comparator": "~1.1"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2015-08-13 10:07:40"
+ },
+ {
+ "name": "phpunit/dbunit",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/dbunit.git",
+ "reference": "390cefcb101e07e1d6400dbdfc3b90ecf2c1279f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/dbunit/zipball/390cefcb101e07e1d6400dbdfc3b90ecf2c1279f",
+ "reference": "390cefcb101e07e1d6400dbdfc3b90ecf2c1279f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pdo": "*",
+ "ext-simplexml": "*",
+ "php": ">=5.4",
+ "phpunit/phpunit": "~4|~5",
+ "symfony/yaml": "~2.1|~3.0"
+ },
+ "bin": [
+ "dbunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "DbUnit port for PHP/PHPUnit to support database interaction testing.",
+ "homepage": "https://github.com/sebastianbergmann/dbunit/",
+ "keywords": [
+ "database",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-11-03 11:17:01"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "f7bb5cddf4ffe113eeb737b05241adb947b43f9d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7bb5cddf4ffe113eeb737b05241adb947b43f9d",
+ "reference": "f7bb5cddf4ffe113eeb737b05241adb947b43f9d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "^1.3.2",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~5"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-11-12 21:08:20"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+ "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2015-06-21 13:08:43"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21 13:50:34"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
+ "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2015-06-21 08:01:12"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.4.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
+ "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2015-09-15 10:49:45"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "5.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "c047ff05d2279404af9a7e89e2a7151c32c88022"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c047ff05d2279404af9a7e89e2a7151c32c88022",
+ "reference": "c047ff05d2279404af9a7e89e2a7151c32c88022",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "myclabs/deep-copy": "~1.3",
+ "php": ">=5.6",
+ "phpspec/prophecy": "^1.3.1",
+ "phpunit/php-code-coverage": "~3.0",
+ "phpunit/php-file-iterator": "~1.4",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": ">=1.0.6",
+ "phpunit/phpunit-mock-objects": ">=3.0.5",
+ "sebastian/comparator": "~1.1",
+ "sebastian/diff": "~1.2",
+ "sebastian/environment": "~1.3",
+ "sebastian/exporter": "~1.2",
+ "sebastian/global-state": "~1.0",
+ "sebastian/resource-operations": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.1|~3.0"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2015-12-10 07:54:54"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "49bc700750196c04dd6bc2c4c99cb632b893836b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/49bc700750196c04dd6bc2c4c99cb632b893836b",
+ "reference": "49bc700750196c04dd6bc2c4c99cb632b893836b",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": ">=5.6",
+ "phpunit/php-text-template": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2015-12-08 08:47:06"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
+ "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/diff": "~1.2",
+ "sebastian/exporter": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2015-07-26 15:48:44"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2015-12-08 07:14:41"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6e7133793a8e5a5714a551a8324337374be209df"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e7133793a8e5a5714a551a8324337374be209df",
+ "reference": "6e7133793a8e5a5714a551a8324337374be209df",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2015-12-02 08:37:27"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
+ "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/recursion-context": "~1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2015-06-21 07:55:53"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2015-10-12 03:26:01"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
+ "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2015-11-11 19:50:13"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "time": "2015-07-28 20:34:47"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2015-06-21 13:59:46"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "3df409958a646dad2bc5046c3fb671ee24a1a691"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/3df409958a646dad2bc5046c3fb671ee24a1a691",
+ "reference": "3df409958a646dad2bc5046c3fb671ee24a1a691",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5.9"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "https://symfony.com",
+ "time": "2015-12-26 13:39:53"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..37703ce
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,8 @@
+
+
+
+
+ tests
+
+
+
\ No newline at end of file
diff --git a/components/Rbac.php b/src/components/Rbac.php
similarity index 100%
rename from components/Rbac.php
rename to src/components/Rbac.php
diff --git a/components/RbacConfigParser.php b/src/components/RbacConfigParser.php
similarity index 100%
rename from components/RbacConfigParser.php
rename to src/components/RbacConfigParser.php
diff --git a/controllers/RbacController.php b/src/controllers/RbacController.php
similarity index 100%
rename from controllers/RbacController.php
rename to src/controllers/RbacController.php
diff --git a/messages/ru/rbac.php b/src/messages/ru/rbac.php
similarity index 100%
rename from messages/ru/rbac.php
rename to src/messages/ru/rbac.php
diff --git a/models/AssignRoleToUserForm.php b/src/models/AssignRoleToUserForm.php
similarity index 100%
rename from models/AssignRoleToUserForm.php
rename to src/models/AssignRoleToUserForm.php
diff --git a/rules/CorrespondingUserRule.php b/src/rules/CorrespondingUserRule.php
similarity index 100%
rename from rules/CorrespondingUserRule.php
rename to src/rules/CorrespondingUserRule.php
diff --git a/views/users/_assign-role-form.php b/src/views/users/_assign-role-form.php
similarity index 100%
rename from views/users/_assign-role-form.php
rename to src/views/users/_assign-role-form.php
diff --git a/views/users/assign-role.php b/src/views/users/assign-role.php
similarity index 100%
rename from views/users/assign-role.php
rename to src/views/users/assign-role.php
diff --git a/tests/DataBaseTestCase.php b/tests/DataBaseTestCase.php
new file mode 100644
index 0000000..ef5a068
--- /dev/null
+++ b/tests/DataBaseTestCase.php
@@ -0,0 +1,34 @@
+createDefaultDBConnection(Yii::$app->db->pdo);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public static function setUpBeforeClass()
+ {
+ Yii::$app->db->open();
+
+ $dump = file_get_contents(Yii::getAlias('@vendor') . '/yiisoft/yii2/rbac/migrations/schema-mysql.sql');
+ $rows = array_filter(explode(';', $dump), function ($row) {
+ return trim($row) !== '';
+ });
+
+ foreach ($rows as $sql) {
+ Yii::$app->db->createCommand($sql)->execute();
+ }
+ }
+}
diff --git a/tests/RbacInitTest.php b/tests/RbacInitTest.php
new file mode 100644
index 0000000..5abd34a
--- /dev/null
+++ b/tests/RbacInitTest.php
@@ -0,0 +1,45 @@
+createFlatXMLDataSet(__DIR__ . '/data/empty.xml');
+ }
+
+ public function testInit()
+ {
+ $options = [
+ 'configPath' => '@tests/rbac/init',
+ ];
+ $parser = new RbacConfigParser($options);
+ $parser->fill();
+
+ $dataSet = $this->createXMLDataSet(__DIR__ . '/data/test-init.xml');
+ $authItemTable = $this->getConnection()->createQueryTable(
+ 'auth_item',
+ 'SELECT `name`, `type`, `description`, `rule_name` FROM `auth_item`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_item'), $authItemTable);
+
+ $authItemChildTable = $this->getConnection()->createQueryTable(
+ 'auth_item_child',
+ 'SELECT * FROM `auth_item_child`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_item_child'), $authItemChildTable);
+
+ $authRuleTable = $this->getConnection()->createQueryTable(
+ 'auth_rule',
+ 'SELECT `name` FROM `auth_rule`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_rule'), $authRuleTable);
+ }
+}
diff --git a/tests/RbacUpdateTest.php b/tests/RbacUpdateTest.php
new file mode 100644
index 0000000..9d2bc78
--- /dev/null
+++ b/tests/RbacUpdateTest.php
@@ -0,0 +1,46 @@
+createXMLDataSet(__DIR__ . '/data/init.xml');
+ }
+
+ public function testUpdate()
+ {
+ $options = [
+ 'configPath' => '@tests/rbac/update',
+ ];
+ $parser = new RbacConfigParser($options);
+ $parser->fill();
+
+ $dataSet = $this->createXMLDataSet(__DIR__ . '/data/test-update.xml');
+ $authItemTable = $this->getConnection()->createQueryTable(
+ 'auth_item',
+ 'SELECT `name`, `type`, `description`, `rule_name` FROM `auth_item`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_item'), $authItemTable);
+
+ $authItemChildTable = $this->getConnection()->createQueryTable(
+ 'auth_item_child',
+ 'SELECT * FROM `auth_item_child`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_item_child'), $authItemChildTable);
+
+ $authRuleTable = $this->getConnection()->createQueryTable(
+ 'auth_rule',
+ 'SELECT `name` FROM `auth_rule`'
+ );
+ $this->assertTablesEqual($dataSet->getTable('auth_rule'), $authRuleTable);
+ }
+
+}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
new file mode 100644
index 0000000..81bd51d
--- /dev/null
+++ b/tests/bootstrap.php
@@ -0,0 +1,28 @@
+ 'unit',
+ 'basePath' => __DIR__,
+ 'aliases' => [
+ 'tests' => __DIR__,
+ 'vendor' => __DIR__ . '/../vendor',
+ ],
+ 'components' => [
+ 'authManager' => [
+ 'class' => 'yii\rbac\DbManager',
+ ],
+ 'db' => [
+ 'class' => 'yii\db\Connection',
+ 'dsn' => 'mysql:host=localhost;dbname=yii2_rbac_tests',
+ 'username' => 'tester',
+ 'password' => '',
+ ]
+ ],
+];
+new \yii\console\Application($config);
\ No newline at end of file
diff --git a/tests/data/empty.xml b/tests/data/empty.xml
new file mode 100644
index 0000000..1691436
--- /dev/null
+++ b/tests/data/empty.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/data/init.xml b/tests/data/init.xml
new file mode 100644
index 0000000..53089d6
--- /dev/null
+++ b/tests/data/init.xml
@@ -0,0 +1,117 @@
+
+
+
+ name
+
+ correspondingUser
+
+
+
+ name
+ type
+ description
+ rule_name
+
+ admin
+ 1
+ Administrator
+
+
+
+ default
+ 1
+ Default
+
+
+
+ operator
+ 1
+ Operator
+
+
+
+ dispatching-room.access
+ 2
+ Access to dispatching room
+
+
+
+ sessions.access
+ 2
+ Sessions management
+
+
+
+ settings.manage
+ 2
+ Settings management
+
+
+
+ users.avatar.upload
+ 2
+ Upload avatar for user
+ correspondingUser
+
+
+ users.avatar.upload.all
+ 2
+ Upload avatar for any user
+
+
+
+ users.manage
+ 2
+ Users management
+
+
+
+ users.password.change
+ 2
+ Change password for user
+ correspondingUser
+
+
+ users.password.change.all
+ 2
+ Change password for any user
+
+
+
+
+ parent
+ child
+
+ operator
+ dispatching-room.access
+
+
+ admin
+ sessions.access
+
+
+ admin
+ settings.manage
+
+
+ operator
+ users.avatar.upload
+
+
+ admin
+ users.avatar.upload.all
+
+
+ admin
+ users.manage
+
+
+ default
+ users.password.change
+
+
+ admin
+ users.password.change.all
+
+
+
diff --git a/tests/data/test-init.xml b/tests/data/test-init.xml
new file mode 100644
index 0000000..cb46bba
--- /dev/null
+++ b/tests/data/test-init.xml
@@ -0,0 +1,117 @@
+
+
+
+ name
+ type
+ description
+ rule_name
+
+ admin
+ 1
+ Administrator
+
+
+
+ default
+ 1
+ Default
+
+
+
+ dispatching-room.access
+ 2
+ Access to dispatching room
+
+
+
+ operator
+ 1
+ Operator
+
+
+
+ sessions.access
+ 2
+ Sessions management
+
+
+
+ settings.manage
+ 2
+ Settings management
+
+
+
+ users.avatar.upload
+ 2
+ Upload avatar for user
+ correspondingUser
+
+
+ users.avatar.upload.all
+ 2
+ Upload avatar for any user
+
+
+
+ users.manage
+ 2
+ Users management
+
+
+
+ users.password.change
+ 2
+ Change password for user
+ correspondingUser
+
+
+ users.password.change.all
+ 2
+ Change password for any user
+
+
+
+
+ parent
+ child
+
+ operator
+ dispatching-room.access
+
+
+ admin
+ sessions.access
+
+
+ admin
+ settings.manage
+
+
+ operator
+ users.avatar.upload
+
+
+ admin
+ users.avatar.upload.all
+
+
+ admin
+ users.manage
+
+
+ default
+ users.password.change
+
+
+ admin
+ users.password.change.all
+
+
+
+ name
+
+ correspondingUser
+
+
+
diff --git a/tests/data/test-update.xml b/tests/data/test-update.xml
new file mode 100644
index 0000000..db0eb29
--- /dev/null
+++ b/tests/data/test-update.xml
@@ -0,0 +1,107 @@
+
+
+
+ name
+ type
+ description
+ rule_name
+
+ admin
+ 1
+ Administrator
+
+
+
+ default
+ 1
+ Default Role
+
+
+
+ dispatching-room.access
+ 2
+ Access to dispatching room
+
+
+
+ operator
+ 1
+ Operator
+
+
+
+ sessions.access
+ 2
+ Sessions access
+
+
+
+ settings.manage
+ 2
+ Settings management
+
+
+
+ users.avatar.upload
+ 2
+ Upload avatar for user
+ correspondingUser
+
+
+ users.manage
+ 2
+ Users management
+
+
+
+ users.password.change
+ 2
+ Change password for user
+ correspondingUser
+
+
+ users.password.change.all
+ 2
+ Change password for any user
+
+
+
+
+ parent
+ child
+
+ operator
+ dispatching-room.access
+
+
+ admin
+ sessions.access
+
+
+ admin
+ settings.manage
+
+
+ operator
+ users.avatar.upload
+
+
+ admin
+ users.manage
+
+
+ default
+ users.password.change
+
+
+ admin
+ users.password.change.all
+
+
+
+ name
+
+ correspondingUser
+
+
+
diff --git a/tests/rbac/init/children.php b/tests/rbac/init/children.php
new file mode 100644
index 0000000..c8ce41b
--- /dev/null
+++ b/tests/rbac/init/children.php
@@ -0,0 +1,18 @@
+ [
+ 'users.password.change',
+ ],
+ 'admin' => [
+ 'users.manage',
+ 'users.avatar.upload.all',
+ 'users.password.change.all',
+ 'settings.manage',
+ 'sessions.access',
+ ],
+ 'operator' => [
+ 'users.avatar.upload',
+ 'dispatching-room.access',
+ ],
+];
\ No newline at end of file
diff --git a/tests/rbac/init/permissions.php b/tests/rbac/init/permissions.php
new file mode 100644
index 0000000..179ed38
--- /dev/null
+++ b/tests/rbac/init/permissions.php
@@ -0,0 +1,38 @@
+ 'users.manage',
+ 'description' => 'Users management',
+ ],
+ [
+ 'name' => 'users.avatar.upload',
+ 'description' => 'Upload avatar for user',
+ 'rule' => 'arogachev\rbac\rules\CorrespondingUserRule',
+ ],
+ [
+ 'name' => 'users.avatar.upload.all',
+ 'description' => 'Upload avatar for any user',
+ ],
+ [
+ 'name' => 'users.password.change',
+ 'description' => 'Change password for user',
+ 'rule' => 'arogachev\rbac\rules\CorrespondingUserRule',
+ ],
+ [
+ 'name' => 'users.password.change.all',
+ 'description' => 'Change password for any user',
+ ],
+ [
+ 'name' => 'dispatching-room.access',
+ 'description' => 'Access to dispatching room',
+ ],
+ [
+ 'name' => 'settings.manage',
+ 'description' => 'Settings management',
+ ],
+ [
+ 'name' => 'sessions.access',
+ 'description' => 'Sessions management',
+ ],
+];
\ No newline at end of file
diff --git a/tests/rbac/init/roles.php b/tests/rbac/init/roles.php
new file mode 100644
index 0000000..3717b8b
--- /dev/null
+++ b/tests/rbac/init/roles.php
@@ -0,0 +1,16 @@
+ 'default',
+ 'description' => 'Default',
+ ],
+ [
+ 'name' => 'admin',
+ 'description' => 'Administrator',
+ ],
+ [
+ 'name' => 'operator',
+ 'description' => 'Operator',
+ ],
+];
\ No newline at end of file
diff --git a/tests/rbac/update/children.php b/tests/rbac/update/children.php
new file mode 100644
index 0000000..d348eec
--- /dev/null
+++ b/tests/rbac/update/children.php
@@ -0,0 +1,17 @@
+ [
+ 'users.password.change',
+ ],
+ 'admin' => [
+ 'users.manage',
+ 'users.password.change.all',
+ 'settings.manage',
+ 'sessions.access',
+ ],
+ 'operator' => [
+ 'users.avatar.upload',
+ 'dispatching-room.access',
+ ],
+];
\ No newline at end of file
diff --git a/tests/rbac/update/permissions.php b/tests/rbac/update/permissions.php
new file mode 100644
index 0000000..3fcf5a1
--- /dev/null
+++ b/tests/rbac/update/permissions.php
@@ -0,0 +1,34 @@
+ 'users.manage',
+ 'description' => 'Users management',
+ ],
+ [
+ 'name' => 'users.avatar.upload',
+ 'description' => 'Upload avatar for user',
+ 'rule' => 'arogachev\rbac\rules\CorrespondingUserRule',
+ ],
+ [
+ 'name' => 'users.password.change',
+ 'description' => 'Change password for user',
+ 'rule' => 'arogachev\rbac\rules\CorrespondingUserRule',
+ ],
+ [
+ 'name' => 'users.password.change.all',
+ 'description' => 'Change password for any user',
+ ],
+ [
+ 'name' => 'dispatching-room.access',
+ 'description' => 'Access to dispatching room',
+ ],
+ [
+ 'name' => 'settings.manage',
+ 'description' => 'Settings management',
+ ],
+ [
+ 'name' => 'sessions.access',
+ 'description' => 'Sessions access',
+ ],
+];
\ No newline at end of file
diff --git a/tests/rbac/update/roles.php b/tests/rbac/update/roles.php
new file mode 100644
index 0000000..b8a2f46
--- /dev/null
+++ b/tests/rbac/update/roles.php
@@ -0,0 +1,16 @@
+ 'default',
+ 'description' => 'Default Role',
+ ],
+ [
+ 'name' => 'admin',
+ 'description' => 'Administrator',
+ ],
+ [
+ 'name' => 'operator',
+ 'description' => 'Operator',
+ ],
+];
\ No newline at end of file