ニュース

ユーザー権限を確認する方法 – Piwik のプラットフォームのご紹介

2014年11月14日 トピックス ニュース

それではブログシリーズの新しい記事、Piwik プラットフォームの機能を紹介します(以前の記事はプラグインを多言語対応にする方法)。今回は、ユーザーの権限を確認する方法を学びます。このチュートリアルでは、基本的な PHP の知識や Piwik のプラットフォーム環境が必要です。

プラグインはいつアクセス権限を確認するのですか?

通常、任意アクションが実行する前に必要とされます。 -データ削除やデータ取得、-センシティブな情報の表示や閲覧制限。インスタンスの API メソッドまたコントローラーアクション。メニュー項目やウィジェットを登録する前などはアクセス許可を確認してください。

Piwik のユーザ管理はどのように動作しますか。

それは非常にシンプルです。これらの権限を区別します:表示だけの権限管理者権限、そしてスーパーユーザー権限
Piwik で複数の Web サイトを管理している場合、ユーザーはいくつかのウェブサイトレポートを閲覧したり操作する権限はありませんが、新たに定義を行うことで、ユーザーへレポート閲覧や管理者権限の異なる役割を割り当てることができます。

つまり権限を相互に継承するということです。管理者権限には自動的に制限された管理権限が含まれ、スーパーユーザーには自動的に全ての表示と管理操作権限が割り当てられます。

はじめに

このシリーズでは、すでに開発環境を設定していることを前提としています。まだの場合は、Piwik デベロッパーゾーンへアクセスし、Piwik のセットアップチュートリアルプラグイン開発ガイドを参照してください。

ユーザーのアクセス許可を確認します。

このプラットフォームはあなたのデータを保護するために、\Piwik\Piwik クラスの多くの便利なメソッドを提供します。メソッド名がcheckisまたはhasで始まっているか、どうかを確認してください。メソッド名がcheckから始まるメソッドは、条件が満たされていない場合に例外を投げます、が、他のメソッドはtrueまたはfalseを返します。

ユーザーが適切な権限を持たない場合で、それ以上の実行を止めたければ、例外を投げるメソッドを使用してください。プラットフォームは、例外をキャッチし、エラーメッセージを表示したり、ユーザーにログインを要求します。

public function deleteAllMessages()
{
    // delete messages only if user has super user access, otherwise show an error message
    Piwik::checkUserSuperUserAccess();

    $this->getModel()->deleteAllMessages();
}

メニュー項目やウィジェットを登録するときにインスタンスのブール値を返すメソッドを使用してください。

public function configureAdminMenu(MenuAdmin $menu)
{
    if (Piwik::hasUserSuperUserAccess()) {
        $menu->addPlatformItem('Plugins', $this->urlForDefaultAction());
    }
}

これは、メニュー項目がUIには表示されないというだけで、ユーザは手動で登録したURLを開くことができる、ということを知っておくことが大切です。したがって実際のコントローラーアクションと同様にアクセス許可を確認する必要があります。

表示権限

表示権限を持つユーザーは、レポート表示のみとなり、個人設定以外は変更されないようにする必要があります。UserHasSomeViewAccessで終わるメソッドは、ユーザーが少なくとも 1 つのウェブサイトの表示権限を持っていることを確認し、*UserHasViewAccess($idSites =array(1,2,3)) は、ユーザーが特定ウェブサイトのすべての表示権限を保持しているかをチェックします。

Piwik::checkUserHasSomeViewAccess();

Piwik::checkUserHasViewAccess($idSites = array(1,2,3));

プラグイン開発の場合、通常、特定 Web サイトの権限を確認するために、後者の例を使用してください。「すべてのウェブサイトのダッシュボード」に似た機能を開発する場合は最初の例を使用します。またユーザーは少なくとも 1 つのウェブサイト表示権限を保持していることを確認してください。

管理者権限

管理者権限ユーザーは限られたレポートの閲覧しかおこなえませんが、ウェブサイト関連の設定を変更することができます。この権限を確認するメソッドは、前述と類似していますが、管理者へ永続的に表示を切り替えます。

Piwik::checkUserHasSomeAdminAccess();

Piwik::checkUserHasAdminAccess($idSites = array(1,2,3));

スーパーユーザー権限

スーパーユーザー権限を持つユーザーは、Piwik の中に格納されたデータすべてにアクセスし、設定を変更することができます。ユーザーの役割が UserSuperUserAccess で終わるいずれかの方法を使用しているか確認してください。

Piwik::checkUserHasSuperUserAccess();

プラグイン開発者として、例えば全てのユーザーにアクティビティログを表示するとか、あるいは任意のシステム全体の設定を変更する可能性の提供とか、そういったことについてのパーミッションをあなたはチェックするでしょう。

現在ログインしているユーザーに関する情報の取得

時には、現在ログイン中のユーザーを知りたいかもしれません。データベース内のユーザー関連情報を保持したい場合や、または現在ログイン中のユーザーに電子メールを送信したい場合に便利です。次のメソッドを呼び出すことによって簡単にこの情報を得ることができます。

$login = Piwik::getCurrentUserLogin()
$email = Piwik::getCurrentUserEmail()

高度な機能

もちろん、あなたがユーザー権限を確認することでより便利なことがあります。例えば、ユーザーが匿名ユーザーまたはユーザーが特定の役割を持っているのかどうか確認をすることができます。現在のユーザーがこの権限を持っていない場合でも、あなたはスーパーユーザーのコンテキストで任意の操作を実行することが出来ます。これらの機能について詳しく知りたいですか?Piwik のクラス参照セキュリティガイドユーザーのユーザー管理ガイドをご覧ください。

API または Piwik デベロッパーゾーンの手順に関してのフィードバックもお気軽にお寄せ下さい


thomas_s-150x150Thomas Steur

Thomasはドイツの名門ソフトウェア会社で働くソフトウェア·エンジニアです。彼は何千人ものユーザーが数十週に渡って使用している当社のPiwik モバイル アプリを作成し、現在の開発リーダーでもあります。Thomasは常により良いPiwikのモバイルを作るために新しいアイデアを試みています。もしアプリ使用しているのであれば、沢山の提案やアイデアのフィードバックをお願いします。