minahito です。
1通ずつ読み始めています。
> ユーザ側ではユーザ登録時やユーザ情報編集時にデリゲートで他の関数等に飛ばすことが
> できますが、管理画面側では同様の機能が実装されていません。例えユーザ側のユーザ登録や
> ユーザ編集で他のテーブルを使用するようにしたとしても、管理側で旧ユーザテーブルを
> 参照していては完全交換とはいかないので、管理側もデリゲートなりを使用して交換可能
> にする必要があると思います。
つまり、従来の 2.1 のスタンスでは、
「ユーザーモジュールというモジュールごと入れ替えてね!」
「Wii でいえば、標準のチャンネルを削除して、別のチャンネルを入れてね!」
という考え方だったが、大規模な開発となり、気楽とはいえないので、
「ユーザーモジュールはそのまま使ってね!
それに対応するコールバックを書いてね!」
というポリシーであれば more better ということですね。
> そこでuserモジュールに手を入れることになると思います。今のところこのモジュールはグループ
> 管理もやっているので、まずはグループ管理の部分を「group」モジュール等として切り離す
> ことでしょうか?おそらくユーザ管理を交換しても、グループ管理を交換する必要はないと
> 思います。グループ管理を交換するとなると、すでにグループのパーミッション機構(groupperm)
> を使用している箇所が動かなくなりますので。grouppermさえも交換すれば良いのかもしれませんが、
> それはかなり大掛かりになってしまうと思います。
モジュール化すればプログラマを分けられますし、いいですね。
UIで統合しているように見せかけられると思いますし。
この場合、
グループからユーザーのリストを得たい場合、
グループはユーザーのデータベースを知らないので、 SQL を発行することはできない、
という感じになるんでしょうか?
それともユーザーモジュールが持っているハンドラにグループの ID を投げて
そっちで検索してもらうので、それなりに効率よくいけるかな
> あとはusersテーブルを参照している箇所が全て変更対象になります。例えばkernel/member.php
> のXoopsMemberHandler::getUserCountByNoGroup()や、kernel/group.phpの
> XoopsMembershipHandler::getUsersByNoGroup()です。この両メソッド、グループ管理で
> 使われていますけど、本当に必要でしょうか?
すみません、実はこのへん詳しくありません。
onokazu さんが一番詳しいと思います。
個人的な感覚では、
メンバーハンドラがハンドラ群の中では一番謎なハンドラで、
モジュール開発者の時代から、 X2 コアが使ってるからそのように使えば良いのか~
という感覚でしか使えていませんでした。
メンバーシップハンドラは、読み出せばリンク情報のテーブルの1行分の情報が帰って
くるので、分かりやすく使いやすかったのです。
基本的に XOOPS ハンドラは、読み出せば、どのテーブルの1行分のデータを返してく
れるのかが割とはっきりしていたのですが、メンバーハンドラのほうはそこがちょっと
分かりにくかったので、扱いづらい印象がありました。
> kernel/user.phpについては、XoopsMemberHandler::_uHandlerさえ交換できるようになれば
> おそらく手を入れる必要はないと思います。ただ、直接XoopsUserHandlerをxoops_gethandlerで
> 取得して使用している場合は、その箇所をXoopsMemberHandler経由に変更する必要もあります。
> XoopsUserHandlerを直接取得するのは本来意図されたものでもありませんので。
やばい
いっぱい使ってる
user ハンドラ
この「XoopsUserHandlerを直接取得するのは本来意図されたものでもありません」
というのは知らなかったのですが、
ソース内コメントにも特に何も書いていませんし、ほとんどの開発者は初耳なんじゃ
ないでしょうか?
(僕が知らないだけ!?)
仮にそうだとすれば、
「 user 取得してるプログラムは全部書き直し!」
って通告するんじゃなくて、なんか上手い方法を探したいところなのですが
# まぁでも別レスで書きましたが、
# 旧 user mod を入れればハンドラもテーブルも X2 互換という環境を用意すれば、
# こっちはこれでもいいかもしれない。
X2 -> XCL 2.1 のときはマイグレーションガイドを書かなかったのですが、
今回は必要そうなので早めに場所を用意しておく必要がありそうですね。
メモメモ...
2008/10/25 11:49 K. Ono <onok...@gmail.com>:
> onokazuです。
> とりあえずここでは2.2でXCLのユーザー管理の完全入れ替えの実現に必要だと思われることを
> 書きます。
> ユーザ側ではユーザ登録時やユーザ情報編集時にデリゲートで他の関数等に飛ばすことが
> できますが、管理画面側では同様の機能が実装されていません。例えユーザ側のユーザ登録や
> ユーザ編集で他のテーブルを使用するようにしたとしても、管理側で旧ユーザテーブルを
> 参照していては完全交換とはいかないので、管理側もデリゲートなりを使用して交換可能
> にする必要があると思います。
> そこでuserモジュールに手を入れることになると思います。今のところこのモジュールはグループ
> 管理もやっているので、まずはグループ管理の部分を「group」モジュール等として切り離す
> ことでしょうか?おそらくユーザ管理を交換しても、グループ管理を交換する必要はないと
> 思います。グループ管理を交換するとなると、すでにグループのパーミッション機構(groupperm)
> を使用している箇所が動かなくなりますので。grouppermさえも交換すれば良いのかもしれませんが、
> それはかなり大掛かりになってしまうと思います。
> あとはusersテーブルを参照している箇所が全て変更対象になります。例えばkernel/member.php
> のXoopsMemberHandler::getUserCountByNoGroup()や、kernel/group.phpの
> XoopsMembershipHandler::getUsersByNoGroup()です。この両メソッド、グループ管理で
> 使われていますけど、本当に必要でしょうか?
> kernel/user.phpについては、XoopsMemberHandler::_uHandlerさえ交換できるようになれば
> おそらく手を入れる必要はないと思います。ただ、直接XoopsUserHandlerをxoops_gethandlerで
> 取得して使用している場合は、その箇所をXoopsMemberHandler経由に変更する必要もあります。
> XoopsUserHandlerを直接取得するのは本来意図されたものでもありませんので。
> とりあえずこれくらいを把握しています。あとは、サードパーティ製モジュールで
> 直接usersテーブルを叩いたりしていると最悪です。その場合はそのモジュール開発者に
> 変更(handler経由にしてもらう等)をお願いするしかないですね。。
--
minahito (minah...@gmail.com)