请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

yii2 的restful 我已经弄清楚登陆的原理accesstoken ,

<?php
namespace app\controllers\api;
use yii\rest\Controller;
use yii\web\Response;
use Yii;
use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;

class BaseController extends Controller
{
    protected $actions = ['*'];
    protected $except = [];
    protected $mustlogin = [];
    protected $verbs = [];

    public $device ;

    //直接在响应主体内包含分页信息
    // public $serializer = [
    //     'class' => 'yii\rest\Serializer',
    //     'collectionEnvelope' => 'items',
    // ];

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => CompositeAuth::className(),
            'authMethods' => [
                HttpBasicAuth::className(),
                HttpBearerAuth::className(),
                QueryParamAuth::className(),
            ],
        ];
        $behaviors['access'] = [
            'class' => \yii\filters\AccessControl::className(),
            'only' => $this->actions,
            'except' => $this->except,
            "user"=>"apiuser",
            'rules' => [
                [
                    'allow' => false,
                    'actions' => empty($this->mustlogin) ? [] : $this->mustlogin,
                    'roles' => ['?'], // guest
                ],
                [
                    'allow' => true,
                    'actions' => empty($this->mustlogin) ? [] : $this->mustlogin,
                    'roles' => ['@'],
                ],
            ],
        ];
        $behaviors['verbs']=[
            'class' => \yii\filters\VerbFilter::className(),
            'actions' => $this->verbs,
        ];
        return $behaviors;
    }

    public function checkAccess($action, $model = null, $params = [])
    {
        if ($action === 'index' || $action === 'delete') {
            if ($model->author_id !== \Yii::$app->user->id)
                throw new \yii\web\ForbiddenHttpException(sprintf('You can only %s articles that you\'ve created.', $action));
        }
    }

behaviour的AccessControl没办法过来登陆用户和分登陆用户的问题。我测试很多便,文档也看了

后来在checkAccess這个方法,也没有办法。


正在回答 回答被采纳积分+3

1回答

提问者 锋君 2017-09-27 22:38:13

求老师指点迷津。checkAccess集成activeController没有办法过滤。文档说是用重写這个方法,yii2但是没有效果父类也没有看到checkAccess這个放发

0 回复 有任何疑惑可以回复我~
  • Jason #1
    先跟我简单描述下你的背景和功能需求
    回复 有任何疑惑可以回复我~ 2017-09-28 06:51:11
  • 提问者 锋君 回复 Jason #2
    现在我们要前后分离打包app,所以就得使用restful,认证用户也就是登陆用户登陆的后可以访问登陆的方法,没有登陆的,大家都都可以访问,就不用认证了。
    回复 有任何疑惑可以回复我~ 2017-09-28 10:08:29
  • Jason #3
    你这样,先试试在checkAccess方法里面输出测试内容,看看这个方法是否执行到
    回复 有任何疑惑可以回复我~ 2017-09-30 16:03:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信