フレームワークの構想 3日目
グループとロールは多対多の関係になる。経費精算システムなどは社員の出張旅費などを部長が承認するということをシステムで行うことになると思うが、部長もまた出張などにより自分の出張旅費の精算を申請することになる。つまり、部長の職責を持った人は、承認ロールと申請ロールの両方を併せ持つことになる。
ロールの粒度も考える必要がある。ロールをあまり細かくすると、アクティビティ権 = ロールとなってしまう。アクティビティ権を増やすたびにロールを増やす必要があり、そのロールをグループに含める作業も必要となってしまうため、運用管理が煩雑になりやすい。しかしこれは杞憂かもしれない。
グループは会社組織をそのままマッピングすることがあるかもしれない。基幹システムは、人というより部署によりアクセスできる機能が異なるだろう。現金出納管理は経理課だけがアクセスできるようにするだろうし、社員情報管理は人事部の人だけがアクセスできるようにするだろう。組織には人事異動がつきものなので、人に直接機能を割り当てるのではなく、組織に使用できる機能を割り当てておき、その組織に人が属する形にする。また、これは極めて異例かもしれないが、人が複数の組織に所属している例もある。A社の社長およびB社の役員を兼務するといった形である。おもにグループ会社内でこのようなことが行われることが多い。子会社の社長に親会社の役員がその職責を持ったまま就任するといったことである。
つまり、組織と人との対応もまた多対多の関係になる。
組織をグループに割り当てることは極めて自然なことかもしれない。また組織は階層構造をしているため、グループもまた階層構造にできるようにする。
ここでふと考えるのは、組織の長はグループにすべきなのかロールにすべきなのかということである。経理課にはその経理課に所属している従業員がいる。経理課の課長も同じ従業員であり、経理課に所属している。しかしながら、課長であり、同課のほかの従業員とは職責が異なるのである。つまり課長は経理課グループに所属しており、課長がなすべきロールを所有していると考えることができる。この場合、経理課グループ中にたとえば、田中課長と佐藤さんをはじめ何人かの課員がユーザーとして所属している。その課員のうち、田中課長だけは課長ロールを有している。つまり、グループ的には課長ロールを持っている以外田中課長とそのほかの課員の間に違いはないことになる。
組織の長をグループにすると経理課グループと経理課長グループというのができることになる。この場合経理課グループの中に経理課長グループが含まれることになるのだろうか。それともその逆だろうか。はたまた並列に並ぶようになるのだろうか。組織階層は一般的に上位にあるほど位が高いと考えられる。つまり、経理課グループのユーザーより経理課長グループのユーザーのほうが、勿論位が高いため、経理課長グループの中に経理課グループが含まれることになる。しかし、今考えている構想ではグループはその上位グループが持っているロールが持っているアクティビティ権をすべて継承することになっているので、経理課長グループが経理課グループを含んでいる場合には、経理課長のロールを経理課のユーザーが継承することになる。しかし、それではまずい。ロールの継承の観点からグループを考えていく必要がある。
ここで、ロールに話を戻すと、ロールもまた階層構造にできるようにすべきかもしれない。複数のロールとアクティビティ権から新しいロールを導出することがあるからである。
関係
ユーザーとグループは多対多の関係である。グループ同士は1(0)対多の関係である。グループとロールは多対多の関係である。ロール同士は1(0)対多の関係である。アクティビティ権とロールは多対多の関係である。
継承
ユーザーは、自分が属しているグループが含んでいるロールにあるアクティビティを実行することができる。自分が所属しているグループが別のグループに所属している場合には、そのグループに含まれているロールにあるアクティビティも実行することができる。つまり、子グループは親グループのアクティビティを継承することができる。ロール同士も親子関係にすることができるため、子ロールは親ロールのアクティビティを継承することができる。ここまでくるとグループとロールはそれぞれ所有するオブジェクトがユーザーかアクティビティ権かの違いだけであとは等しい。ユーザーもアクティビティ権も所有することができることにすると、グループとロールを同一視することができる。このことは後で考えることにする。
ひとえに継承するといっても闇雲に継承したくない場合があるだろう。その場合は継承するものとしないものを選択できる仕組みを考える。継承のフィルタをして、フィルタにあるものは継承しない。ないものだけを継承するといったようにする必要があるかもしれない。このあたりはフォルダのアクセス権を参考にするといいかもしれない。