Разграничить администраторские права

Помогите пожалуйста. На сайте имеется несколько администраторов. Но получается, что если они имеют админские права, то и в админпанели они могут тоже все(вкл. и откл. плагины, менять настройки и т.д.).

Вопрос как мне защититься от кривых рук? Идея такая, чтобы часть меню админки скрыть от них, а оставить только пункт «блоги и пользователи». Пускай что хотят там-то и делают.

В файле menu.admin.tpl (aceadminpanel) добавил {if $oUserCurrent->isAdministrator()} и получилось вот так
{if $oUserCurrent->isAdministrator()}
    <li {if $sMenuItemSelect=='blogs'}class="active"{/if}>
        <a href="{router page='admin'}blogs/">{$oLang->adm_menu_blogs}</a>
	{if $sMenuItemSelect=='blogs'}
        <ul class="sub-menu" >
            <li {if $sMenuSubItemSelect=='list'}class="active"{/if}><div><a href="{router page='admin'}blogs/list/">{$oLang->adm_menu_blogs_list}</a></div></li>
            {if $aPluginActive.aceblogextender}
            <li {if $sMenuSubItemSelect=='category'}class="active"{/if}><div><a href="{router page='category'}admin/list/">{$oLang->mblog_categories}</a></div></li>
            {/if}
        </ul>
	{/if}
    </li>


Но тогда все равно открывается все меню, поскольку они являются админами. А хотелось бы чтобы было как-то вот так

{if $sUserLogin==gena}, но тогда меню закрывается для всех.

Что я не так сделал?

21 комментарий

avatar
проверку надо делать на стороне php, иначе зная урл он всё-равно залезет туда, куда не надо (и таки залезет)
avatar
100%.
А если на шаблонах, то попробуй сделать подстановку в шаблоне типа
{if $oUserCurrent->isAdministrator() and $sUserLogin==gena}
    <li {if $sMenuItemSelect=='blogs'}class="active"{/if}>
        <a href="{router page='admin'}blogs/">{$oLang->adm_menu_blogs}</a>
        {if $sMenuItemSelect=='blogs'}
        <ul class="sub-menu" >
            <li {if $sMenuSubItemSelect=='list'}class="active"{/if}><div><a href="{router page='admin'}blogs/list/">{$oLang->adm_menu_blogs_list}</a></div></li>
            {if $aPluginActive.aceblogextender}
            <li {if $sMenuSubItemSelect=='category'}class="active"{/if}><div><a href="{router page='category'}admin/list/">{$oLang->mblog_categories}</a></div></li>
            {/if}
        </ul>
{elseif $oUserCurrent->isAdministrator()}
    <li {if $sMenuItemSelect=='blogs'}class="active"{/if}>
        <a href="{router page='admin'}blogs/">{$oLang->adm_menu_blogs}</a>
    </li>

То есть первое меню для админа гены, а другое для всех админов
avatar
Пробовал, но все равно закрывает для всех админов
avatar
Объясните мне дураку, как заработает условие без переменной?
Ведь переменная sUserLogin=gena не дана… хм.
avatar
что вы понимаете под переменной, есть пользователь у него права админа, я его проверяю $sUserLogin==gena.
Подскажите как правильно, я в php не особо силен. Так, сам потихоньку пытаюсь разобраться.
avatar
Проверяешь по сути пустоту…
пустую тетрадку, чтобы получить текст, нужно создать переменную, для условий.
$sUserLogin = «gena»
а ещё лучше, по id…
avatar
спасибо попомогло, сделал вот так
{$sUserLogin = 'admin'}
{if $oUserCurrent->isAdministrator() and $sUserLogin=='gena'}
avatar
млин, вообще-то не сработало, не туда просто посмотрел
avatar
{$sUserLogin = 'admin'}

Поменяй на
{$oUserLogin = 'admin'}
avatar
{$oUserLogin = 'gena'}
{if $oUserCurrent->isAdministrator() and $sUserLogin=='gena'} 


Попробуй эту строчку.
avatar
все равно, не работает. Я предполагаю, что нужно еще выгрузить там логин, а уже потом проверять, как-нибудить

$sUserLogin=$this->sCurrentEvent;
/**
* Проверяем есть ли такой юзер
*/
if (!($this->oUserProfile=$this->User_GetUserByLogin($sUserLogin))) {

}
А уже потом проверять
{$oUserLogin = 'gena'}
{if $oUserCurrent->isAdministrator() and $sUserLogin=='gena'}

только я не пойму как здесь правильно эту строчку использовать ($sUserLogin=$this->sCurrentEvent; )
avatar
Хм… я не понимаю одного, почему именно логин…
попробуй в кодах UserId и по id его…
avatar
Попробовал, тоже не сработало, я говорю, что надо как-то выцепить id или пароль, а потом уже проверять условие.
avatar
не пароль, а логин. Опечатался
avatar
попробую, но уже завтра, а то мен на работу. Но по мне нет разницу, что проверять логин или пароль
avatar
Не понимаю. Вот так получаю логин пользователя {$oUserCurrent->getLogin()}
Так почему полученный логин сравнивая с нужным {if $oUserLogin=='admin'} закрывает меню для всех.
avatar
Поидее вот так он должно быть открыто только для админа
{$oUserCurrent->getLogin()}
	{if $oUserCurrent->isAdministrator and $oUserLogin=='admin'}
avatar
Я уже все перепробовал, ничего не помогает.
Неужели никто не поможет.
avatar
{if $oUserCurrent->isAdministrator() and $oUserCurrent->getLogin()=='admin'}
avatar
точнее так:

{if $oUserCurrent and $oUserCurrent->isAdministrator() and $oUserCurrent->getLogin()=='admin'}
avatar
Ура!!! Заработало. Спасибо огромное.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.