2019-07-30 21:19:08 1650次浏览 2条回答 0 悬赏 40 金钱

我有一个 Controller 只允许本机访问, 我在控制器里面这如下方法写的,按道理只能本机访问,但是我在局域网内随便那台电脑都能访问,这个是啥原因?

public function behaviors()
{

    return [
        'access' => [
            'class' => AccessControl::className(),
            'only'=>['recharge'],
            'rules' => [
                [
                    'ips' => ['127.0.0.1'],//这里填写允许访问的IP
                    'allow' => true,
                ],
                [
                    'allow' => true,
                    'roles' => ['?',"@"],
                ],


            ],
        ],
    ];
}

最佳答案

  • 发布于 2019-07-31 08:33 举报

    复制一段权威指南中的话:

    ACF 自顶向下逐一检查存取规则,直到找到一个与当前 欲执行的动作相符的规则。 然后该匹配规则中的 allow 选项的值用于判定该用户是否获得授权。如果没有找到匹配的规则, 意味着该用户没有获得授权。

    可以看出,匹配规则之间是 或 的关系,只要有一个规则能通过,用户即可访问。再看 你的第二条规则,相当于 所有用户 均可访问,无论前面的规则结果如何 或上 一个 true 后,都是 通过的

    1 条回复
    回复于 2019-07-31 10:10 回复

    我把两条规则写到一起,就可以了。

    return [
        'access' => [
            'class' => AccessControl::className(),
            'only'=>['recharge'],
            'rules' => [
                [
                    'roles' =>['?','@'],
                    'ips' => ['127.0.0.1'],//这里填写允许访问的IP
                    'allow' => true,
                ],
            ],
        ],
    ];
    
  • 回答于 2019-07-31 08:15 举报

    首先请确认下,你说的控制器还是具体控制器的action呢?
    从你的截图看是限制到当前控制器的actionRecharge方法。
    因为我看到了

    'only'=>['recharge']
    

    所以你应该尝试不同电脑访问recharge方法才能看出效果,对不对?
    先试试把,不行再说。

您需要登录后才可以回答。登录 | 立即注册
秀小川
主管

秀小川

注册时间:2017-08-16
最后登录:2022-05-23
在线时长:20小时47分
  • 粉丝1
  • 金钱455
  • 威望0
  • 积分655

热门问题