如何检测用户是否为超级用户?


20

为了确定访客是否是客人,我们使用以下方法:

if ($user->guest) {
echo 'Hello, guest!';
}

现在,如果我想确定访问者是否是注册的超级用户(管理员),那么该代码是什么?

我有一些外部PHP文件,除了Joomla网站的SuperUsers之外,其他任何人都无法访问。只是尝试通过导入Joomla CMS保护文件。


1
有趣的是,我昨晚需要这个,只是用谷歌搜索,直到找到解决方案。就我而言,我覆盖了RSFiles的输出,因此工具栏仅对管理员显示。
Brian Peat 2014年

1
实际上,不应使用接受的答案中的$ user-> get('isRoot')。在最新的Joomla版本(3.6及更高版本)中,最有可能在JUser :: authorize()外部这样调用时将不起作用。像dev-m的答案一样,使用$ user-> authorize('your params here')代替。
FFrewin

Answers:


28

这些代码将确定当前登录的用户是否是超级用户-

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');

该代码将检查在全局配置中而不是仅在组件级别上映射到“超级用户”权限的内容。自己检查一下,并与其他方法进行比较。


2
此答案中的解释有些虚弱,但我认为core.admin比更好的检查权限core.edit
Brilliand14年

1
我不同意。core.admin是用于控制对全局配置的访问权限的权限,因此它是检查用户是否为超级管理员的适当方法。如果您像接受的答案一样检查第8组,则为Joomla!出于安全考虑,如果决定将其随机化,您的脚本将被破坏。始终在编写代码时要牢记变化。除非您从未打算升级。
Mathew Lenning 2014年

显然,这是超级用户检查的最佳匹配。它将同时检查故障安全和SuperUser权限。github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/…另一个选择是$ user-> get('isRoot'),它假定已经使用了authorize来填充isRoot状态。isRoot是受保护的属性,因此可以直接使用。github.com/joomla/joomla-cms/blob/staging/administrator/…–
Peter Wiseman

只是为了清除对此代码是否正确的疑问:在Joomla的核心(Joomla 3.5.1)中使用此代码来检查用户是否是超级管理员。您可以在libraries/joomla/user/user.php文件的第747行找到它。就是这个:$iAmSuperAdmin = $my->authorise('core.admin');
itoctopus

8

要确定“超级用户”状态,您必须检查$user->isRoot。在完成第一次授权检查并检测到用户为超级管理员后,将设置此属性。

但是通常您确实希望检查用户是否具有某些权限,如其他答案中所述。


3
假定$ user-> authorise()已被其他对象调用以填充isRoot属性。还要注意,isRoot属性是受保护的,因此需要通过$ user-> get('isRoot')进行访问。
Peter Wiseman 2014年

6

尝试这个,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

这将返回一个数组,默认情况下,Joomla Admin用户为Super admin(第8组)和Administrator(第7组)。

您可以检查数组是否具有以下任何值,然后应为Admin user;如果创建了Custom User组,则也必须进行检查#__usergroups parent Id

希望能帮助到你..


6

您可以使用条件拒绝不在特定组中的任何人。

$user = JFactory::getUser();
$groups = $user->groups;

if (in_array(8, $groups)):

 //only enter if the user is in the group 8 (group 8 = Super-Administrator)

endif;

1
幻数不是一个很好的解决方案。您可以将超级管理员权限授予任何组和/或删除默认的超级管理员组。
David Hayes

我用过类似的东西if(in_array(8, $user->groups)),它对我有用
-Linga

4

尝试以下代码检查登录用户是超级管理员还是其他用户...

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo 'You are an Administrator';
}
else  {
echo 'You are not Administrator';
}

OR

function isSuperAdmin()
{
  $user = JFactory::getUser();
  return $user->get('isRoot');
}    

if (isSuperAdmin()) 
{
  echo 'You are an Administrator';
}
else  {
  echo 'You are not Administrator';
}

1
实际上,不应使用$ user-> get('isRoot')。在最新的Joomla版本(3.6及更高版本)中,最有可能在JUser :: authorize()外部这样调用时将不起作用。像dev-m的答案一样,使用$ user-> authorize('your params here')代替。
FFrewin

我将首先对其进行测试,感谢您的指出。:)
saibbyweb

1
$user->get('isRoot');不适用于J3.6.2。
saibbyweb '16

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.