天天看點

zatree插件優化:優化左側邊欄

zatree是監控軟體zabbix的一個插件,主要功能是提供host group的樹形展示和在item裡指定關鍵字查詢及資料排序。

    又發現zatree的一個小問題:在zabbix_config.php配置Admin和密碼後,任何普通使用者在zatree的左側欄能看到所有的主機組清單,包括沒有權限的那些主機組。

    zatree是用zabbix_config.php中配置的使用者和密碼來擷取主機組清單的,因為配置的是Admin超級使用者,自然能擷取到全部的主機組了。

    是以優化了zatree左側邊欄,使普通使用者隻能看到屬于自己的主機組清單。原理是zabbix_ajax.php擷取cookie中的sessionid,通過這個sessionid擷取登入使用者的主機組清單。

<a href="http://s3.51cto.com/wyfs02/M01/41/94/wKiom1PWE5qzNhesAAEDA8i2LmI205.jpg" target="_blank"></a>

    修改方法如下,這裡針對zatree的zabbix-2.2.x版本做修改,方法同樣适合zabbix-2.0.x版本:

    進入zatree目錄,修改以下兩個檔案:

    第一步:zabbix_ajax.php

傳遞$_COOKIE['zbx_sessionid']給hostgroupGet(),擷取目前使用者具有readable權限的主機組清單。

<code>        </code><code>$groups</code> <code>= </code><code>$zabbixApi</code><code>-&gt;hostgroupGet(</code><code>array</code><code>(</code><code>"output"</code> <code>=&gt; </code><code>"extend"</code><code>, </code><code>"monitored_hosts"</code> <code>=&gt; true));</code>

修改為:

<code>        </code><code>if</code><code>(isset(</code><code>$_COOKIE</code><code>[</code><code>'zbx_sessionid'</code><code>])){</code>

<code>            </code><code>$groups</code> <code>= </code><code>$zabbixApi</code><code>-&gt;hostgroupGet(</code><code>array</code><code>(</code><code>"output"</code> <code>=&gt; </code><code>"extend"</code><code>, </code><code>"monitored_hosts"</code> <code>=&gt; true), </code><code>''</code><code>, </code><code>$_COOKIE</code><code>[</code><code>'zbx_sessionid'</code><code>]);</code>

<code>        </code><code>} </code><code>else</code> <code>{</code>

<code>            </code><code>$groups</code> <code>= </code><code>$zabbixApi</code><code>-&gt;hostgroupGet(</code><code>array</code><code>(</code><code>"output"</code> <code>=&gt; </code><code>"extend"</code><code>, </code><code>"monitored_hosts"</code> <code>=&gt; true));</code>

<code>        </code><code>}</code>

    第二步:ZabbixApiAbstract.class.php

修改2594行hostgroupGet方法,添加$sessionid形參。當傳入$sessionid參數時,設定$this-&gt;auth的值為$sessionid。

<code>    </code><code>public</code> <code>function</code> <code>hostgroupGet(</code><code>$params</code><code>=</code><code>array</code><code>(), </code><code>$arrayKeyProperty</code><code>=</code><code>''</code><code>)</code>

<code>    </code><code>{</code>

<code>        </code><code>// get params array for request</code>

<code>        </code><code>$params</code> <code>= </code><code>$this</code><code>-&gt;getRequestParamsArray(</code><code>$params</code><code>);</code>

<code>        </code><code>// request</code>

<code>        </code><code>return</code> <code>$this</code><code>-&gt;request(</code><code>'hostgroup.get'</code><code>, </code><code>$params</code><code>, </code><code>$arrayKeyProperty</code><code>);</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>function</code> <code>hostgroupGet(</code><code>$params</code><code>=</code><code>array</code><code>(), </code><code>$arrayKeyProperty</code><code>=</code><code>''</code><code>, </code><code>$sessionid</code><code>=</code><code>''</code><code>)</code>

<code>        </code><code>if</code> <code>(isset(</code><code>$sessionid</code><code>))</code>

<code>            </code><code>$this</code><code>-&gt;auth = </code><code>$sessionid</code><code>;</code>

本文轉自 張斌_青島 51CTO部落格,原文連結:http://blog.51cto.com/qicheng0211/1531637

繼續閱讀