Привет всем!
Не могу разобраться с RBAC
1.Почему-то во fronted у меня нет регистрации, и вкладка Signup не открывается-
только 'login' - но зарегистрироваться нельзя.
В backend -тоже - ошибка 404 и открывается ссылка http://admin[dot]site[dot]com/site/register[dot]html
т.е. значит сервер не нашел страницу, куда его послали. Очень странный путь: site/register.html , Как настроить урл менеджер, и где? на .html ?
Как сделать доступ к админке только для админа и контент-менеджера? А на fronted - регистрацию доступной для всех?
Какой экшен нужно создать и где?
Куда нужно добавить это исключение?
1. Vladim - 13 Сентября, 2017 - 17:10:28 - перейти к сообщению
site\yii2\\backend\controllers\Site Controllers
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- namespace backend\controllers;
- use Yii;
- use yii\web\Controller;
- use yii\filters\VerbFilter;
- use yii\filters\AccessControl;
- use common\models\LoginForm;
- use yii\base\DynamicModel;
- use vova07\imperavi\Widget;
- use yii\base\Action;
- use yii\base\InvalidCallException;
- use yii\base\InvalidConfigException;
- use yii\helpers\FileHelper;
- use yii\web\BadRequestHttpException;
- use yii\web\Response;
- use yii\web\UploadedFile;
- use yii\helpers\Url;
- use yii\widgets\ActiveForm;
- use kartik\widgets\FileInput;
- use common\models\Person;
- use common\models\ImageManager;
- /**
- * Site controller
- */
- class SiteController extends Controller
- {
- /**
- * @inheritdoc
- */
- public function behaviors()
- {
- return [
- 'access' => [
- 'class' => AccessControl::className(),
- 'rules' => [
- [
- 'actions'=> ['index'],
- 'allow' => true,
- 'roles' => ['canAdmin','admin'],
- ],
- [
- 'actions' => ['login', 'error'],
- 'allow' => true,
- ],
- [
- 'actions' => ['logout','save-redactor-img','save-img'],
- 'allow' => true,
- 'roles' => ['@'],
- ],
- ],
- ],
- 'verbs' => [
- 'class' => VerbFilter::className(),
- 'actions' => [
- 'logout' => ['post'],
- ],
- ],
- ];
- }
- /**
- * @inheritdoc
- */
- public function actions()
- {
- return [
- 'error' => [
- 'class' => 'yii\web\ErrorAction',
- ],
- ];
- }
- /**
- * Displays homepage.
- *
- * @return string
- */
- public function actionIndex()
- {
- return $this->render('index');
- }
- /**
- * Login action.
- *
- * @return string
- */
- public function actionLogin()
- {
- if (!Yii::$app->user->isGuest) {
- return $this->goHome();
- }
- $model = new LoginForm();
- if ($model->load(Yii::$app->request->post()) && $model->login()) {
- return $this->goBack();
- } else {
- return $this->render('login', [
- 'model' => $model,
- ]);
- }
- }
- /**
- * Logout action.
- *
- * @return string
- */
- public function actionLogout()
- {
- Yii::$app->user->logout();
- return $this->goHome();
- }
- public function actionSaveRedactorImg ($sub='main')
- {
- $this -> enableCsrfValidation = false;
- if (Yii::$app->request->isPost) {
- $dir = Yii::getAlias ('@images') .'/'.$sub.'/';
- FileHelper::createDirectory($dir);
- }
- $file = UploadedFile::getInstanceByName('file');
- $model ->addRule ('file', 'image')->validate();
- if ($model->hasErrors()) {
- $result = [
- 'error' => $model -> getFirstError ('file')
- ];
- } else {
- $model->file->name = strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6) . '.' . $model->file->extension;
- if ($model->file->saveAs ($dir . $model->file->name)) {
- $imag = Yii::$app->image->load($dir . $model->file->name);
- $imag -> resize (800, NULL, Yii\image\drivers\Image::PRECISE)
- ->save($dir . $model->file->name, 85);
- $result = [
- 'filelink' => $result_link . $model->file->name,'filename'=>$model->file->name];
- } else {
- $result = [
- 'error' => Yii::t ('vova07/imperavi', 'ERROR_CAN_NOT_UPLOAD_FILE')
- ];
- }
- }
- Yii::$app->response->format = Response::FORMAT_JSON;
- return $result;
- } else {
- throw new BadRequestHttpException ('Only Post is allowed');
- }
- }
- public function actionSaveImg ()
- {
- $this -> enableCsrfValidation = false;
- if (Yii::$app->request->isPost) {
- $post = Yii::$app->request->post();
- $dir = Yii::getAlias ('@images') .'/'.$post['ImageManager']['class'].'/';
- FileHelper::createDirectory($dir);
- }
- $file = UploadedFile::getInstanceByName('ImageManager[attachment]');
- $model = new ImageManager();
- $model->name = strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6) . '.' . $file->extension;
- $model ->load($post);
- $model->validate();
- if ($model->hasErrors()) {
- $result = [
- 'error' => $model -> getFirstError ('file')
- ];
- } else {
- if ($file->saveAs($dir . $model->name)) {
- $imag = Yii::$app->image->load($dir . $model->name);
- $imag -> resize (800, NULL, Yii\image\drivers\Image::PRECISE)
- ->save($dir . $model->name, 85);
- $result = [
- 'filelink' => $result_link . $model->name,'filename'=>$model->name];
- } else {
- $result = [
- 'error' => 'ошибка'
- ];
- }
- $model->save();
- }
- Yii::$app->response->format = Response::FORMAT_JSON;
- return $result;
- } else {
- throw new BadRequestHttpException ('Only Post is allowed');
- }
- }
- }
site\yii2\common\config\main.pgp
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- return [
- 'timeZone' => 'Europe/Moscow',
- 'components' => [
- 'cache' => [
- 'class' => 'yii\caching\FileCache',
- /* 'robotEmail' => '',*/
- /*'robotName' => 'Robot'*/
- ],
- 'image' => [
- 'class' => 'yii\image\ImageDriver',
- 'driver' => 'GD', //GD or Imagick
- ],
- 'authManager' => [
- 'class' => 'yii\rbac\DbManager',
- 'cache' => 'cache'
- ],
- ],
- 'on beforeAction' => function($event){ //цепляемся за событие перед запуском экшена
- Yii::$app->controller->attachBehavior('',[ //цепляем к текущему контролеру поведение
- 'class' => \yii\filters\AccessControl::className(), //указываем класс поведения
- 'except' => ['login','error'], //исключим из правила экшены login и error, так как они должны быть доступны всем
- 'rules' => [
- [
- 'allow' => true, //разрешаем доступ
- 'roles' => ['admin'], //'@' только зарегистрированным пользователям или замените на 'admin', что бы только админам позволить
- ],
- ],
- ]);
- },
- ];