사용자가 수퍼 유저인지 감지하는 방법


20

방문자가 손님 인지 확인하기 위해 다음과 같이 사용합니다.

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

방문자가 등록 된 수퍼 유저 (관리자)인지 여부를 확인하려면 해당 코드는 무엇입니까?

내 Joomla 웹 사이트의 수퍼 유저를 제외한 다른 사람이 액세스하고 싶지 않은 외부 PHP 파일이 있습니다. Joomla CMS를 가져 와서 파일을 보호하려고합니다.


1
웃긴 나는 지난 밤이 필요했고 해결책을 찾을 때까지 봤다. 필자의 경우 RSFiles의 출력을 재정 의하여 도구 모음이 관리자에게만 표시되도록했습니다.
Brian Peat

1
실제로 허용 된 답변에있는 $ user-> get ( 'isRoot')는 사용하지 않아야합니다. 최신 Joomla 버전 (3.6 이상)에서는 JUser :: authorize () 외부에서 이와 같이 호출하면 작동하지 않습니다. dev-m의 답변처럼 $ user-> authorize ( 'your params here')를 대신 사용하십시오.
FFrewin

답변:


28

이 코드는 현재 로그인 한 사용자가 수퍼 유저인지 여부를 결정합니다.

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

이 코드는 구성 요소 수준뿐만 아니라 전역 구성에서 "슈퍼 사용자"권한에 매핑 된 항목을 검사합니다. 다른 방법과 비교하여 직접 확인하십시오.


2
이 답변의 설명은 약간 약하지만 core.admin확인하는 것보다 낫습니다 core.edit.
Brilliand

1
동의하지 않습니다. core.admin은 전역 구성에 대한 액세스를 제어하는 ​​데 사용되는 권한이므로 사용자가 최고 관리자인지 확인하는 적절한 방법입니다. 허용 된 답변과 같이 그룹 8을 확인하면 Joomla! 보안상의 이유로 무작위로 결정하면 스크립트가 중단됩니다. 항상 변경 사항을 염두에두고 코딩하십시오. 업그레이드 할 생각이 없다면
Mathew Lenning 2016 년

이것은 수퍼 유저 확인과 가장 일치합니다. 페일 세이프와 수퍼 유저 권한을 모두 검사합니다. github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/… 다른 대안은 $ user-> get ( 'isRoot')인데, 이는 이미 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');
이것입니다

8

"슈퍼 사용자"상태를 확인하려면 확인해야 $user->isRoot합니다. 이 속성은 첫 번째 승인 확인이 완료되고 사용자가 최고 관리자 인 것으로 감지 된 후에 설정됩니다.

그러나 일반적으로 다른 답변에 설명 된 것과 같은 특정 권한이 사용자에게 있는지 확인하는 것이 좋습니다.


3
이것은 $ user-> authorise ()가 이미 isRoot 속성을 채우기 위해 다른 것으로 호출되었다고 가정합니다. 또한 isRoot 속성은 보호되므로 $ user-> get ( 'isRoot')를 통해 액세스해야합니다.
Peter Wiseman 2018 년

6

이 시도,

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

기본적으로 Joomla Admin 사용자 최고 관리자 (그룹 8) 및 관리자 (그룹 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
매직 넘버는 좋은 해결책이 아닙니다. 모든 그룹에 Super Admin 권한을 부여하거나 기본 Super Admin 그룹을 삭제할 수 있습니다.
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

2

Joomla @since 3.2, UserGroupList 필드는이를 사용하여 확인합니다.

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

이 답변은 @ dev-m의 답변 과 매우 유사합니다 .
Farahmand

@Farahmand 당신 말이 맞아, 방금 Joomla가 선호하는 방법이 무엇인지 확인하기 위해 추가했으며 Joomla 버전 3 이상에도 유효합니다.
Pedro Bicudo Maschio

괜찮아. 어쨌든, 질문은 이미 joomla-3.x 로 태그되었습니다 .
Farahmand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.