ポータルのアーキテクチャ

ポータルの各種リソースを追加・保守するユーザインタフェースについて見ていく前に、ポータルを構成するために Liferay で使われている概念について見ておくのがいいでしょう。

ポータル (Portal) はユーザ (User) によってアクセスされます。

ユーザはユーザグループ (User Group) にまとめられます。

ユーザは組織 (Organization) に所属します。

組織は、本社→支社→支店といったように、階層化することができます。

共通の関心事があるユーザ、ユーザグループ、組織は、コミュニティ (Community) に所属することができます。

組織やコミュニティで、ユーザはチーム (Team) に所属することができます。チームは、コミュニティや組織内で特定の職務にあたっているユーザをグルーピングしたものです。

これについて最も簡単に考えるには、まずユーザがいて、ユーザは様々な方法でグルーピングできると考えてください。グルーピングの方法には、管理者によって構成された階層構造をとるものもあれば、ユーザが自分で構成できるものもあります (複数の組織に所属している別々のユーザの中から、犬という共通の関心事のある人たちが集まって「愛犬家」コミュニティを立ち上げるなど)。また別のグルーピング方法は、管理者によって、ポータル横断的に職務のためのロールを介して構成されます (複数のコミュニティや組織のユーザからなる「掲示板管理者」ロールを作り、該当するユーザがポータル内の掲示板を管理できるようにするなど)。

こういったポータル内の概念がどのように構成されるかを、この後の図でまとめてお見せします。

下の図で、それぞれの矢印は「〜のメンバになれる」という意味だと思ってください。ですからつまり、組織はコミュニティのメンバになれる、コミュニティはロールのメンバになれる、ユーザは何のメンバにでもなれる、といった具合です。一見とても複雑に見えますが、このような強力な仕組みにより、ポータル管理者がポータルのリソースやセキュリティを、一貫性のある堅牢なやり方で設定することが可能になっています。ひとつ重要なのは、下図ではユーザとその集合体についてしか示していないということです。権限 (Permission) はこういった集合体に沿って設定されるわけではありません。権限を割り当てることができるのはロールのみです。

liferay-15.png
図 15: Liferay の権限モデル

不安になってくるかもしれませんが、この図は見た目ほど複雑ではありません。チームは個々の組織やコミュニティの中にあり、利用できるのは組織やコミュニティで作成された場合だけです。組織やコミュニティの中に描かれているロールは、その組織やコミュニティでのみ適用されるロールです。つまり、ポータル内の組織やコミュニティごとにこういったロールを作成し、組織やコミュニティごとに違ったやり方でこのロールの権限や所属関係を設定できるのです。

ユーザ

ユーザは、システムの実際の利用者を表し、人々がシステムにログインする際に使用するユーザアカウントになります。デフォルトでは、各ユーザは自分で管理できるパブリックページとプライベートページのある、プライベートなコミュニティを持ちます。この機能は、管理者が無効にしたり終了させたりすることもできます。しかし、この個人用領域は重要です。これがあることで、ユーザが自分の公開ブログやプライベートなカレンダーを持ったり、文書を格納するための場所を持ったりといったことができるからです。

ユーザは複数の方法で集約することができます。ユーザは、「Liferay, Inc.→セキュリティ→インターネットセキュリティ」といったような組織階層のメンバになることができます。任意のユーザグループ (「ブロガー」など) に集約することができ、これによってブログページを持つユーザと持たないユーザを分けて扱うことが可能です。ユーザは、共通の関心事に関するコミュニティのメンバになることもできます。また、システム内での権限を定義したロールを持つことができます。ロールは「ポータル内」「組織内」「コミュニティ内」というように適用範囲を指定することができます。

ユーザグループ

ユーザグループは簡単な任意のユーザ集合体で、管理者によって作成されます。ユーザグループはコミュニティやロールのメンバになることができます。権限をユーザグループに対して割り当てることはできません。ユーザグループはコミュニティや組織といった他のユーザ集合体のようなページを持ちませんが、ユーザの個人ページをカスタマイズする際に利用できるページテンプレートを持ちます。これについては後で詳しく説明します。

ロール

ロールには以下の 3 種類があります。

  • ポータルロール
  • 組織ロール
  • コミュニティロール

これを、ロールのスコープと呼びます。ロールはそれぞれ該当するスコープ (ポータル全体、組織全体、コミュニティ全体) での権限を定義します。例えば、掲示板のカテゴリ作成権限を持つロールというものを考えてみましょう。ポータルロールであれば、ポータル全体で、掲示板ポートレットのある場所であればどこであっても権限が有効です。コミュニティロールはあるひとつのコミュニティ内でのみ権限が有効ですし、組織ロールならある組織内でのみ権限が有効です。

ロールは厳密にポータルのセキュリティのためにされるものなので、やはりコミュニティや組織のようなページは持ちません。

ユーザ、ユーザグループ、コミュニティ、組織は、ロールのメンバになることができます。

組織

組織はユーザを階層的に集約したもので、ページを持つことのできる 2 種類のポータルリソースのうちのひとつです。支部 (location) と呼ばれる特殊な種類の組織もあり、これはユーザが具体的にどこにいるかを定義できるものです。

組織はある特定の階層構造の中でユーザの所属を定義するのに便利です。例えば、大規模な組織で Liferay を運用するとして、ユーザ Joe Smith を定義する場合、組織図上での位置が参考にできるわけです。Joe Smith がニュージャージーオフィスのセールスエンジニアで、営業部の北東方面課に在籍しているとすれば、このユーザは以下の組織のメンバになるでしょう。

  • 販売部
  • 北東方面課
  • ニュージャージー支部

ここで、各ユーザのホームページに (ユーザグループのページテンプレートを介して) 静的ポートレットとして「データ配信 (Asset Publisher)」ポートレットを配置し、コンテンツ管理システムを通じて雇用者に各種の通知を行えるようにしたとします。コンテンツに対するタグ付けを適切に行うと、Joe Smith は、販売部、北東方面課、ニュージャージー支部に当てられた通知だけを受け取ることになります。

組織はコミュニティのメンバになることができます。

コミュニティ

コミュニティは、共通の関心事があるユーザを集約したものです。Liferay のデフォルトページは、ポータル用に作られたコミュニティの一部です。というのは、すべての人――匿名であるかポータルのメンバであるかに関わらず――は、サイトのデフォルトのパブリックページについて共通して関心があるといえるからです。コミュニティには以下の 3 種類があります。

  • オープン (Open)
  • 制限付き (Restricted)
  • プライベート (Hidden)

オープンなコミュニティ (デフォルト) は、各ユーザがそのコミュニティへ自由に加入・脱退することができます。参加や脱退は、コントロールパネルか、自分のアクセスできるページに追加された「コミュニティ (Communities)」ポートレットを使って行います。制限付きコミュニティは、コミュニティ管理者でないとコミュニティへのユーザ追加が行えません。ユーザはコントロールパネルかコミュニティポートレットを使って登録を依頼します。プライベートコミュニティは制限付きコミュニティに似ていますが、コミュニティポートレットやコントロールパネルにまったく表示されないという点が加わっています。プライベートコミュニティへのユーザの追加は、コミュニティ管理者でないと行えません。

チーム

チームはあるコミュニティや組織の中で一意です。チームは、基本的には、コミュニティ内で作成できるユーザの集合です。これがチームとコミュニティロールや組織ロールと違う点で、チームはそれが作成された特定のコミュニティや組織の中にのみ存在します。何らかの目的でコミュニティや組織の中でユーザのチームを作成する必要がある場合に便利ですが、ポータル内の各組織・コミュニティをチームとしてまとめることはできません。

チームはある種のユースケースには欠かせないこともあります。というのは、コミュニティ管理者や組織管理者でもチームを作成できるからです。コミュニティ管理者や組織管理者はロールを作成することができないので、チームを作成できるおかげで、以前には不可能だったレベルでの権限管理が可能になっています。