代码之家  ›  专栏  ›  技术社区  ›  Peter Perháč

Joomla-确定登录用户是否是管理员

  •  1
  • Peter Perháč  · 技术社区  · 15 年前

    我在一个基于Joomla的大项目上工作很开心,原因很难解释(我不想批评你,乔姆拉!很好,只是不适合我目前面临的任务)当我在google上搜索一个确定当前登录用户是否是管理员的方法时,我发现一个帖子非常大胆地建议使用以下代码:

    $user =& JFactory::getUser();
    if($user->usertype == "Super Administrator" || $user->usertype == "Administrator"){ ... }
    

    对我来说,这看起来像是一个相当奇怪的方式检查管理用户。我会很感激的 $user->isAdmin()

    5 回复  |  直到 15 年前
        1
  •  3
  •   giraff    15 年前

    实际上,作为 hard coded 在乔姆拉的数据库里!1.5,这个字符串比较失败的唯一方法是有人故意将新的组侵入其中。字符串可以在.ini文件中更改(这样非英语安装仍然使用数据库中的英语单词-对于插件或组件的名称等其他表,这是不正确的)

    获取组id 通过 JFactory::getACL() $acl->getGroupsByUser($userid, false) (见 docs ),但是假设一个更大的id也意味着更大的特权,看起来也有点不太靠谱(尽管对于标准安装是这样)。

    接管Joomla!能力 :更明确地定义“管理员用户”是什么:可以安装新软件的人?谁可以更改系统的配置?只是做一个合理的假设,一些与你想让他做什么作为一个管理用户,使用它在 authorize() -呼叫(参见 docs ),并可能将其记录在界面中。

    为ACL authorize lookuptable定义新条目

    $acl =& JFactory::getACL();
    $acl->addACL('{com_nameOfExtension}', '{action}', 'users', 'super administrator');
    $acl->addACL('{com_nameOfExtension}', '{action}', 'users', 'administrator');
    

    我们又看到了,硬编码的组名。好。

        2
  •  2
  •   jim tollan    15 年前

    彼得,

    我同意joomla的观点,我们在这里也使用.net/php,并且有一些项目是出于某种未知的原因在joomla上启动的!!

        $user =& JFactory::getUser();
    
        if ($user->authorize('com_content', 'edit', 'content', 'all')) {
                echo "<p>You may edit all content.</p>";
        } else {
                echo "<p>You may not edit all content.</p>";
        }
    
        if ($user->authorize('com_content', 'publish', 'content', 'own')) {
                echo "<p>You may publish your own content.</p>";
        } else {
                echo "<p>You may not publish your own content.</p>";
        }
    

    我知道它仍然是硬编码的,但至少它是特定于用户的,而不是特定于priviledge的。不过,这种方法允许您针对特定的“组件”相关特权,因此可能对您有用。

    我会跟踪回复,看看是否有一个'正确'的答案,因为它肯定是一个遗漏。

    吉姆

        3
  •  0
  •   srinivas    15 年前

    以下可能是对Joomla的黑客攻击。我试过了,结果成功了。

    $_SESSION[__default][user]->usertype;
    

        4
  •  0
  •   Faisal Alvi    10 年前

    $user =& JFactory::getUser();
    
    $assigned_usergroups = $user->groups; // Array of assigned User Group
    
        if (in_array(8, $assigned_usergroups)) {
            echo "Super Admin";
        }
    
        else if (in_array(7, $assigned_usergroups)) {
            echo "Admin";
        }
    
        else {    
            echo "Other"; //Any of Guest/Public/Others
        }
    

    您可以看到数据库中每个用户组的Joomla预定义id的以下快照:

    Snapshot here

        5
  •  -1
  •   JustLearn    15 年前

    如果你的joomla管理员用户名是 admin

    $user =& JFactory::getUser();
    if($user->usertype == "Super Administrator" && $user->username == "admin")
    {
      //... do what ever
    }