Closed vystepanenko closed 7 years ago
In your backend configuration, backend/config/main.php
:
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
'components' => [
......
],
In your common configuration, common/config/main.php
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
],
],
Then you can use the following url for access to comment management page:
http://backend.your-domain.com/comment
But, only users with admin role can access to this page.
If you want to access without rbac to comment managemet page, you can use the following configuration:
'controllerMap' => [
'comment' => [
'class' => \yii2mod\comments\controllers\ManageController::class,
'accessControlConfig' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
],
],
]
],
],
But, this is the bad approach!
Thanks for your reply. I definitely will use RBAC. It's just for test
А можно еще парочку глупых вопросов от новичка?
Прежде всего я пока все делаю на бэкенде.(тестовый сервер, тренируюсь)
Мои настройки:
В composer.json
:
"require": {
....
"yii2mod/yii2-comments": "*"
},
В common/config/main.php
:
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
],
В backend/config/main.php
...
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
....
'urlManager' => [
'scriptUrl' => 'index.php',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
backend/config/main.php
оставляю только:
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
Получаю ошибку, что нет доступа к этому action:
...-][error][yii\web\HttpException:403] yii\web\ForbiddenHttpException: You are not allowed to perform this action. in /app/vendor/yiisoft/yii2/filters/AccessControl.php:154
Хотя Yii говорит мне, что моя роль admin
Покажите пожалуйста ошибку, мне так сложно понять
Добавьте в комментарий целиком всю ошибку
Ошибка при добавлении комментария
2017-07-17 11:43:23 [192.168.83.1][1][-][error][yii\web\HttpException:404] yii\base\InvalidRouteException: Unable to resolve the request: comment/default/create in /app/vendor/yiisoft/yii2/base/Controller.php:127
Stack trace:
#0 /app/vendor/yiisoft/yii2/base/Module.php(523): yii\base\Controller->runAction('default/create', Array)
#1 /app/vendor/yiisoft/yii2/web/Application.php(102): yii\base\Module->runAction('comment/default...', Array)
#2 /app/vendor/yiisoft/yii2/base/Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#3 /app/backend/web/index.php(17): yii\base\Application->run()
#4 {main}
Next yii\web\NotFoundHttpException: Page not found. in /app/vendor/yiisoft/yii2/web/Application.php:114
Stack trace:
#0 /app/vendor/yiisoft/yii2/base/Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 /app/backend/web/index.php(17): yii\base\Application->run()
#2 {main}
2017-07-17 11:43:23 [192.168.83.1][1][-][info][application] $_GET = [
'entity' => ':B39£æÿYH
ßìdf1f9d0c066b90e500788cc0b0d1c8f5b10cbeba92b6193d55801fd2f521e870o¼tGa3,(ÛPRfim]É]F£Ä<«É|±Á,R
®éÙ+½uÄÛüDH>oc»Þ\"sÇ
)³¿DÿÅlæ3W¼|Mó$ÒåwêJqdB'
]
Запрос идет на фронтенд часть при добавлении комментария через форму?
Возможно вам нужно добавить след. правила в конфиг на фронтенде
'rules' => [
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
],
Насколько я могу судить запрос остается на бэкенде.
'SCRIPT_FILENAME' => '/app/backend/web/index.php'
'REDIRECT_STATUS' => '200'
'SERVER_NAME' => 'admin.domain.dev'
'SERVER_PORT' => '80'
'SERVER_ADDR' => '192.168.83.137'
'REMOTE_PORT' => '14634'
'REMOTE_ADDR' => '192.168.83.1'
'SERVER_SOFTWARE' => 'nginx/1.10.3'
'GATEWAY_INTERFACE' => 'CGI/1.1'
'REQUEST_SCHEME' => 'http'
'SERVER_PROTOCOL' => 'HTTP/1.1'
'DOCUMENT_ROOT' => '/app/backend/web'
'DOCUMENT_URI' => '/index.php'
'REQUEST_URI' => '/comment/default/create?entity=%C3%A6%40%C3%80%C3%9D%C3%BD%C3%A4b%C2%A6%C2%80%C3%88%06%C2%9A%C3%B8%C3%9F%1Evd172d9b7303ed024536ed7f1e3ace24b8e27ffcee78d139d971a35598e714468w%3Br%C2%91%5E%3B%C3%A8%C2%94I%5E%C3%87p%C2%BB%0F%C2%B8N%C2%9Fi%1E%C3%B6%C3%BE%C3%88%C2%93%C2%A6j%21%C2%AE+%C2%A3%C3%8BV%3F%19z%C2%A3%C2%B6m%C3%A4%08%16%3F%C3%B2%C2%8D%C3%803%C2%AA%C3%B6%2C%5C%C2%98%C2%BE%C3%B6H%C3%B0%05S%C2%84%21%C3%8E%5E%C3%B1%5E5H%19%C3%B9%14%04o%C2%A0%C3%B3aa%C2%94u1%2F%3E%05%C3%85%C2%B0%C2%B6H%C3%A3%C3%90K%C2%98%C2%93e%C3%A8%C3%A4H%40%C3%A2l%01'
'SCRIPT_NAME' => '/index.php'
Пробовал добавить указанные правила в frontend/config/main.php
- не помогло :(
Такс, вьюха с комментариями у вас на фронтенде, но запрос идет на бекенд. Пока не понимаю в чем проблема и как такое возможно. Вечером гляну, пока трудно сказать
Нет. У меня все на бэке. Вьюха с комментариями тоже на бэке
http://admin.domain.dev/products/view?id=1
ну если вьюха на беке, тогда вот этот код нужно на бек добавить
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
],
],
А вот этот убрать
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
А также, этот код уберите из common/main.php
'modules' => [
'comment' => [
'class' => 'yii2mod\comments\Module',
],
],
Осознал свою глупость 👍 Комменты сохраняются и отображаются в во вьюхе без проблем.
Но вопрос с панелью управления при такой конфигурации остается открытым.
Если убрать вот это из backend/config/main.php
:
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
то невозможно попасть на панель управления из бэка. Ругается на что не может обработать запрос
yii\base\InvalidRouteException: Unable to resolve the request: comment/default/ in /app/vendor/yiisoft/yii2/base/Controller.php:127
Пробовал вот такую конфигурацию в backend/config/main.php
'modules' => [
....
'comment' => [
'class' => 'yii2mod\comments\Module',
'controllerMap' => [
'default' => \yii2mod\comments\controllers\ManageController::class,
],
],
],
При такой конфигурации опять не могу попасть из-за ошибки доступа:
An Error occurred while handling another error:
yii\base\InvalidRouteException: Unable to resolve the request: site/error in /app/vendor/yiisoft/yii2/base/Controller.php:127
Stack trace:
#0 /app/vendor/yiisoft/yii2/base/Module.php(523): yii\base\Controller->runAction('error', Array)
#1 /app/vendor/yiisoft/yii2/web/ErrorHandler.php(97): yii\base\Module->runAction('site/error')
#2 /app/vendor/yiisoft/yii2/base/ErrorHandler.php(111): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException))
#4 {main}
Previous exception:
yii\web\ForbiddenHttpException: You are not allowed to perform this action. in /app/vendor/yiisoft/yii2/filters/AccessControl.php:154
Stack trace:
#0 /app/vendor/yiisoft/yii2/filters/AccessControl.php(137): yii\filters\AccessControl->denyAccess(Object(yii\web\User))
#1 /app/vendor/yiisoft/yii2/base/ActionFilter.php(75): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction))
#2 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent))
#3 /app/vendor/yiisoft/yii2/base/Component.php(545): call_user_func(Array, Object(yii\base\ActionEvent))
#4 /app/vendor/yiisoft/yii2/base/Controller.php(272): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent))
#5 /app/vendor/yiisoft/yii2/web/Controller.php(164): yii\base\Controller->beforeAction(Object(yii\base\InlineAction))
#6 /app/vendor/yiisoft/yii2/base/Controller.php(154): yii\web\Controller->beforeAction(Object(yii\base\InlineAction))
#7 /app/vendor/yiisoft/yii2/base/Module.php(523): yii\base\Controller->runAction('', Array)
#8 /app/vendor/yiisoft/yii2/web/Application.php(102): yii\base\Module->runAction('comment', Array)
#9 /app/vendor/yiisoft/yii2/base/Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#10 /app/backend/web/index.php(17): yii\base\Application->run()
#11 {main}
Плюс опять не сохраняются комментарии.
Вечерком гляну, сейчас не смогу помочь
Если будет актуально для вас
Если вас не затруднит :)
В целом я думаю есть ли смысл вообще с этим заморачиваться и пробовать лепить все на бэк? Если у меня вьюхи будут на фронте(модуль будет подключен в common/config
) а панель управления на бэке, с помощью вот этого в backend/config
:
'controllerMap' => [
'comment' => \yii2mod\comments\controllers\ManageController::class,
],
То все ж должно работать без проблем?
да, конечно, недавно пробовал c yii2-advanced, модуль работал без проблем.
Тогда остался тока вопрос почему меня с ролью admin не пускает в панель управления, а если добавляю вот это в backend/config:
'controllerMap' => [
'comment' => [
'class' => \yii2mod\comments\controllers\ManageController::class,
'accessControlConfig' => [
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
],
],
]
],
],
то проблем нет. Но пускает конечно тогда абсолютно всех
сложно сказать, что у вас отдает такой код?
var_dump(\Yii::$app->user->can('admin'));
/app/backend/controllers/ProductsController.php:57:boolean false
значит у вас роль не 'admin'
А если доступ реализован не через RBAC, а просто через АСF можно ли как-то сконфигурировать ваш модуль для доступа к панели управления?
Так он через него и работает, посмотрите в контроллер, там конфиги применяются через класс AccessControl
Просто требуется роль - admin
Вот вы же сами конфигурировали
'class' => 'yii\filters\AccessControl',
'rules' => [
[
'allow' => true,
],
],
Еще раз осознал свою глупость)
Относледовался от вашего класса. Заменил функцию behaviors() на свою с проверкой на админа и все заработало!
Спасибо за помощь 👍
не за что!
Hello! I'm new to yii2 and if you dont mind I'll ask you some question. I'm use yii2-advanced template. Added your module via composer. Migrate all migrations without errors. Added to "common/config/main.php" this config string " 'modules' => [ 'comment' => [ 'class' => 'yii2mod\comments\Module', ],] " 1) If i havent config RBAC yet(but i have users table with user_role attribute) can I somehow access management section? 2) Can I somehow make access to management section only from backend? for example backedn.mydomain.com/commets/index ?