ユーザーがスーパーユーザーかどうかを検出する方法


20

訪問者がゲストかどうかを判断するには、次のようなものを使用します。

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

ここで、訪問者が登録済みのスーパーユーザー(管理者)かどうかを判断したい場合、そのコードはどうなりますか?

Joomla Webサイトのスーパーユーザー以外の誰もアクセスしたくない外部PHPファイルがいくつかあります。Joomla CMSをインポートしてファイルを保護しようとしています。


1
おかしい私はこの昨夜を必要とし、解決策を見つけるまでグーグルで検索しました。私の場合、RSFilesからの出力をオーバーライドしていたため、ツールバーは管理者のみに表示されます。
ブライアンピート14

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
ブリリアンド14

1
同意しません。core.adminは、グローバル構成へのアクセスを制御するために使用される権限であるため、ユーザーがスーパー管理者であるかどうかを確認する適切な方法です。Joomla!の場合、受け入れられた答えのようにグループ8を確認する場合 セキュリティのためにランダム化することに決めた場合、スクリプトは破損します。常に変更を念頭に置いてコーディングしてください。アップグレードするつもりがない限り。
マシューレニング14年

これは明らかに、スーパーユーザーのチェックに最適です。フェイルセーフとスーパーユーザーの許可の両方をチェックします。github.com/joomla/joomla-cms/blob/staging/libraries/joomla/user/…その他の代替手段は、$ root-> get( 'isRoot')です。isRootは保護されたプロパティであるため、直接使用できます。github.com/joomla/joomla-cms/blob/staging/administrator/…–
ピーターワイズマン

このコードが正しいかどうかの疑問を明確にするために:このコードは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')を介してアクセスする必要があります。
ピーターワイズマン14年

6

これを試して、

$user  = JFactory::getUser();

$user_groups = $user->groups;

print_r($user_groups);

これにより、デフォルトでJoomla管理ユーザーのスーパー管理者(グループ8)および管理者(グループ7)の配列が返されます。

配列にこれらの値のいずれかが含まれていることを確認#__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
マジックナンバーは素晴らしい解決策ではありません。任意のグループにスーパー管理者権限を付与したり、デフォルトのスーパー管理者グループを削除したりできます。
デビッドヘイズ

私のようなものを使用しif(in_array(8, $user->groups))、それは私のために働いた
リンガ

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あなたは正しいです、Joomlaが推奨する方法と、Joomlaバージョン3+でまだ有効であることを確認するために追加しました
Pedro Bicudo Maschio

はい。とにかく、質問はすでにjoomla-3.xでタグ付けされています。
ファラマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.