在Yii2中拒绝未登录用户的视图站点

时间:2014-11-29 16:58:56

标签: php yii2

我在Yii2中有这个代码,我定义了用户(在models / Users.php中):

<?php

namespace app\models;

class User extends \yii\base\Object implements \yii\web\IdentityInterface
{
    public $id;
    public $username;
    public $password;
    public $authKey;
    public $accessToken;

    private static $users = [
        '100' => [
            'id' => '100',
            'username' => 'admin',
            'password' => 'my_password',
            'authKey' => 'my_authkey',
            'accessToken' => 'my_accessyoken',

这是我在SiteController.php中的代码:

<?php

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout'],
                'rules' => [
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

问题是:

1)现在,访问者可以查看我网站中的任何页面而无需登录。哪种方法是强制用户登录以查看任何页面的最简单方法?

2)我怎样才能让特定用户查看某些私人页面?

我已经尝试了一些没有运气的选择......

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,您阻止任何未登录的人访问您的注销页面。但是,您不会阻止访客访问控制器中的任何其他页面。您可以执行此操作:https://github.com/yiisoft/yii2-app-advanced/blob/master/frontend/controllers/SiteController.php

了解他们如何定义只有登录的人才有权注销,只有访客才能注册。

关于第二部分,只允许某些登录客户访问某些部分,您始终可以创建自己的过滤器: http://www.yiiframework.com/doc-2.0/guide-structure-filters.html 或者你可以尝试在控制器动作之前覆盖。