HTML-Helper链接的自我验证?

时间:2015-08-18 17:51:25

标签: cakephp cakephp-3.0

如何自动防止链接显示在模板ctp文件中?

我会举个例子:

允许用户(id = 1)查看teamcalendars / view / 1 用户(id = 2)不允许查看teamcalendars / view / 1。

User1是团队1的成员,应该看到并关注该链接。 User2不是任何团队的成员,也不应该看到指向日历的链接,也不应该遵循它。但我想将链接放在团队/索引文件中,用户可以访问并查看所有团队,但每个团队有不同的选项。

如果User2跟随链接(或手动将其键入浏览器),控制器将返回重定向和关于缺少权限的错误消息。无论如何,User2永远不会到达那里。但是,如何阻止蛋糕显示User2的链接(其误导性)?

是否有可能将链接连接到控制器和操作以及它所通向的对象的id,所以我不需要为每个视图构建和传递变量来决定哪些链接可以显示吗?

很抱歉没有提供任何代码,但我想任何人都知道如何将数组从Controller发送到View以及如何使用if(){echo $ this-> Html-> link()}验证它,这就是我目前正在做的事情。

感谢您提前提供任何帮助或评论。

1 个答案:

答案 0 :(得分:0)

一个选项是定义您自己的HtmlHelper并覆盖链接功能,以便它首先检查链接上的权限,并且只有在允许访问时才输出它。如下所示:

namespace App\View\Helper;
use \Cake\View\Helper\HtmlHelper;
// Or, if you're already using a third-party HTML helper, something like
// use BootstrapUI\View\Helper\HtmlHelper as HtmlHelper;

class MyHtmlHelper extends HtmlHelper
{
    function link($title, $url = null, array $options = [])
    {
        if (checkMyPermissions($url)) {
            return parent::link($title, $url, $options);
        }
    }
}

然后在你的AppController中:

use App\View\Helper\MyHtmlHelper;
public $helpers = [
    'Html' => ['className' => 'MyHtmlHelper'],
    // ... and all your other helpers
];