dokuwiki:如何隐藏未登录用户的媒体管理器链接

时间:2013-03-23 17:34:25

标签: dokuwiki

在dokuwiki中,如何从未登录的用户中隐藏“媒体管理器”链接或顶部的任何其他链接?

8 个答案:

答案 0 :(得分:4)

一种方法是更改​​模板,如下所示: 在/lib/tpl/dokuwiki/tpl_header.php中:

            <?php
                if ($INFO['isadmin']) {
                    tpl_action('recent', 1, 'li'); //recent changes
                    tpl_action('media', 1, 'li'); //media manager
                    tpl_action('index', 1, 'li'); //sitemap
                }
            ?>

答案 1 :(得分:2)

如果没有用户登录,则$ INFO [“userinfo”]为空

在/lib/tpl/dokuwiki/tpl_header.php中 取代

tpl_toolsevent('sitetools', array(
                    tpl_action('recent', true, 'li', true),
                    tpl_action('media', true, 'li', true),
                    tpl_action('index', true, 'li', true)
                ));

             if(!empty($INFO["userinfo"]))  {
                tpl_toolsevent('sitetools', array(
                    tpl_action('recent', true, 'li', true),
                    tpl_action('media', true, 'li', true),
                    tpl_action('index', true, 'li', true)
                ));
             }

答案 2 :(得分:1)

创建一个插件。我们假设插件名称为nositetoolsanon,因此您需要在lib/plugins/nositetoolsanon/action.php下创建一个文件。

<?php
if(!defined('DOKU_INC')) die();

class action_plugin_nositetoolsanon extends DokuWiki_Action_Plugin {
    public function getInfo(){
        return array('date'=>'2017-08-25', 'name'=>'No sitetools for anonymous users', 'author'=>'Phy25');
    }

    public function register(Doku_Event_Handler $controller) {
        $controller->register_hook('TEMPLATE_SITETOOLS_DISPLAY', 'BEFORE', $this, 'action_link');
    }

    public function action_link(&$event, $param){
        global $INFO;
        if(empty($INFO["userinfo"])){
            // more robust check by ACL: global $ID; if (auth_quickaclcheck($ID) < AUTH_READ)
            $event->preventDefault();
        }
    }
}

此方法适用于任何模板,不会被更新覆盖。

提示:如果要为无法读取的用户提供名称空间,请尝试在配置文件中设置$conf['sneaky_index'] = 1,但it may cause issues if deeper namespaces have higher permissions than the ones above

答案 3 :(得分:0)

不完全是你想要的东西(也许有点迟了),但这里有一种方法可以禁用所有(包括已登录)用户的Media Manager链接:

  • 转到管理面板,配置设置;
  • 搜索禁用DokuWiki操作(选项名称:disableactions);
  • 其他操作中,添加关键字media(请参阅reference here)。

请注意,这会隐藏所有人的链接,但具有写入权限的用户仍然可以在编辑页面时单击相应的按钮来启动媒体管理器。

答案 4 :(得分:0)

我最近自己提出这个问题,发现所选答案对我来说不够。我很确定它不起作用,因为我使用的是Codowik模板而不是默认模板。这就是我用sivann的答案提出来的。

我编辑了/lib/tpl/codowik/tpl_header.php并将其添加到顶部:

<?php
  if (!$INFO['isadmin']) {
    echo "<script>
        var newStyle = document.createElement('Style');
        newStyle.innerHTML = '#codowiki_search_ul a {display: none;}';
        document.head.appendChild(newStyle);
      </script>";
  }
?>

它相当hackish,但我没有时间深入了解模板的实现方式,并且它有效!

答案 5 :(得分:0)

我只希望站点地图对访问者和注册用户可见(我将网站用作博客),所以只希望对我(管理员)可见最近的更改和媒体链接。

这是我在inc / Menu / SiteMenu.php的“ Greebo”中更改的代码

    protected $types = array(
        //'Recent', // comment out stuff not required
        //'Media',
        'Index'     // leave sitemap for spiders
    );

    // add this function
    // remove the "&& $INFO['isadmin']" to allow all logged in users to see options
    public function __construct(){
        global $INPUT;
        global $INFO;
        if($INPUT->server->str('REMOTE_USER') && $INFO['isadmin']){
            $this->types = array( 'Recent', 'Media', 'Index' );
        }
    }

答案 6 :(得分:0)

我的“ grebo”解决方案

  • 找到inc / Action / Media.php
  • 编辑方法tplContent():
public function tplContent() {
    global $INFO;
    if ( empty($INFO['userinfo']) ) {
                echo "<p>No way</p>";  
                return;
    }
    tpl_media();
}

因此,只有用户(而非匿名用户)可以看到媒体管理器。

答案 7 :(得分:-1)

我的解决方案可能隐藏了太多信息,但我们走了:

  1. 以管理员身份登录
  2. 进入管理部门
  3. 滚动到ACL(访问控制列表)管理
  4. 将用户/组“@all”权限设置为“无”