1

正当化するのが難しい理由で、Joomla に基づいた大きなプロジェクトに取り組んでいて、とても楽しいです。(批判するつもりはありませんが、Joomla! は素晴らしいですが、現在直面しているタスクには向いていません) 現在ログインしているユーザーが管理者であるかどうかを判断する方法をグーグル検索したところ、投稿が見つかりました次のコードを使用することを非常に大胆に推奨しています。

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

私には、これは管理者ユーザーをチェックするかなり奇妙な方法のように見えます。$user->isAdmin()いくつかのハードコードされた文字列ではなく、これを行う方法をいただければ幸いです。

Joomla! 内の管理者ユーザーをチェックするためのより洗練されたソリューションを見つけることができませんでした! フレームワーク。誰でも助けることができますか?

4

5 に答える 5

3

実際、アクセス レベルはJoomlaのデータベースにハード コードされているためです。1.5 では、この文字列比較が失敗する唯一の方法は、誰かが意図的に新しいグループをハッキングした場合です。文字列は .ini ファイルで変更できます (英語以外のインストールでもデータベースで英語の単語を使用できるようにします。これは、プラグインやコンポーネントの名前などの他のテーブルには当てはまりません)。

グループ IDJFactory::getACL()は, を介して取得できますが$acl->getGroupsByUser($userid, false)( docsを参照)、ID が大きいほど特権も大きいと仮定すると、少しハックに思えます (ただし、標準のインストールには当てはまります)。

それ以外は、Joomla! を引き継ぐことができます。能力: より明確に定義します。「管理者ユーザー」とは何か: 新しいソフトウェアをインストールできる人? 誰がシステムの構成を変更できますか? 管理者ユーザーとして彼に何をしてもらいたいかに関連する合理的な仮定を立て、それをauthorize()-Call ( docsを参照) で使用し、インターフェースで文書化することもできます。

(私が知っている) 唯一のクリーンな解決策は、ACL-authorize-lookuptable の新しいエントリを定義することです(現在、SQL ではなく PHP でのみ実装されています)。これが Joomla であることを確認する唯一の方法です。1.6-proof で、カスタム ユーザー グループが可能になります (そのため、管理者ユーザーは、この権限をユーザー グループに付与するかどうかを選択できます)。例えば:

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

また、ハードコードされたグループ名があります。良い。

于 2010-08-05T20:50:12.107 に答える
2

ピーター、

私は 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>";
    }

まだハードコードされていることは知っていますが、少なくとも権限固有ではなく、ユーザー固有です。ただし、このアプローチでは、特定の「コンポーネント」関連の特権をターゲットにすることができるため、役立つ場合があります。

間違いなく省略であるため、返信を追跡して「適切な」回答があるかどうかを確認します。

ジム

于 2010-07-26T11:28:45.267 に答える
0

以下は Joomla のハッキングの可能性があります。私はそれを試して働きました。

セッションの場合を考えてみましょう

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

これにより、ログインしているユーザーのタイプが得られ、これを任意の条件ステートメントで使用できます

于 2010-08-04T09:22:56.740 に答える
-1

joomla管理者のユーザー名が次の場合はadmin、前に説明した以下のコードaspeterを使用できます

$user =& JFactory::getUser();
if($user->usertype == "Super Administrator" && $user->username == "admin")
{
  //... do what ever
}
于 2010-08-05T03:51:20.817 に答える