[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[kahua-dev:01236] Re: <kahua-user> の拡張
ユーザオクラスを拡張したい場合に,<kahua-user>クラスを継承した
クラスを定義できるかについては,以前にも議論があって,
その時は,継承はしないで<kahua-user>インスタンスへの参照を持つのが
良いんじゃないかって事になったと思います.
でも,この方法だとkahua-current-userとかkahua-add-userのAPIを使えないので
同じような仕組みを独自に実装する必要があって面倒でした.
昨日のGaucheFestで「やっぱり<kahua-user>クラスを継承してかつKahuaが提供する
ユーザAPIを使いたい」って話しが出て,<kahua-user>クラスの継承をサポートする
ようになりました.
拡張ユーザクラスを定義する時は,普通に*.kahua内で
(define-clas <my-kahua-user> (<kahua-user>)
((e-mail :allocation :persistent)))
とするだけです.
<kahua-user>クラスを継承するクラスを定義した時点で
kahua.userモジュールが提供するAPIはユーザクラスとして<my-kahua-user>クラスを
使うようになります.
同様にkahua.serverモジュールにある(kahua-current-user)の返り値も
<my-kahua-user>インスタンスになります.
継承した場合の欠点は,ワーカ間でDBを共有していてもユーザ情報を共有できなくなる事です.
柴田
On Tue, 9 Aug 2005 00:33:11 +0900
SHIBATA Tomohisa <t0m0h1s4@xxxxxxxxxxxx> wrote:
> こんばんは,柴田です.
>
> <kahua-user>を継承するのではなく,login-nameで対応付けた
> 別のクラス<hoge-user>を作るのはどうでしょうか.
>
> ログインには<kahua-user>を使い,ログイン後はlogin-nameから
> 引っ張ってきた<hoge-user>を使う感じです.
> <hoge-user>をアプリケーション毎に用意すれば様々な情報を追加
> できます.
>
> あと,認証は<kahua-user>を使うので,1つのidとpasswordで
> 複数のアプリケーションにログインできるかも…
> ;; ZOPE・Ploneのユーザ管理部分がこんなんでした.
>
> <kahua-user>はシンプルであって欲しいです.
>
> 〜<イメージ>〜
> (define-class <hoge-user> (<kahua-persistent-base>)
> ((login-name :allocation :persistent
> :init-keyword :login-name :init-value #f)
> (fullname :allocation :persistent
> :init-keyword :fullname :init-value #f)
> (group-alist :allocation :persistent
> :init-keyword :group-alist :init-value '())
> (kahua-user :allocation :persistent
> :init-keyword :kahua-user :init-value #f)
> ))
>
> (define-method key-of ((self <hoge-user>))
> (ref self 'login-name))
>
> (define (hoge-check-user login-name password)
> (let ((user (kahua-check-user login-name password)))
> (and user
> (or (hoge-find-user login-name)
> (make <hoge-user>
> :login-name login-name
> :kahua-user user)))))
>
> (define (hoge-find-user login-name)
> (and (kahua-find-user login-name)
> (find-kahua-instance <hoge-user> login-name)))
>
> (define (hoge-add-user login-name password fulllname)
> (if (hoge-find-user login-name)
> #f
> (let ((user (or (kahua-find-user login-name)
> (kahua-add-user login-name password))))
> (make <hoge-user>
> :login-name login-name
> :fullname fullname
> :kahua-user user))))
>
> (define hoge-current-user
> (getter-with-setter
> (lambda ()
> (let ((user (kahua-current-user)))
> (and user
> (find-kahua-instance <hoge-user> (ref user 'login-name)))))
> (lambda (logname)
> ((setter kahua-current-user) logname))))
>
> (define (hoge-user-password-change user old-password new-password)
> (kahua-user-password-change (ref user 'kahua-user) old-password new-password))
>
> On Mon, 8 Aug 2005 11:21:29 +0900
> えんどうやすゆき <yasuyuki@xxxxxxxxxxxx> wrote:
>
> > えんどうです。
> >
> > ユーザー情報として持たせたい内容はアプリケーションごとに様々です。
> >
> > たとえばソーシャルネットワークでは「友達リスト」を持たせたいかも
> > 知れません。
> > このようなとき、<kahua-user>を継承した独自のユーザークラス
> > を書いたとします。
> >
> > この独自のユーザークラスを使った会員の登録、認証は、
> > kahua.userモジュールを使って行えば良いでしょうか?
> >
> > それとも新たなGaucheモジュールやKahuaプラグインを書
> > くべきでしょうか?
> >
> > なんか抽象的な質問ですみません。後者の例をお持ちの方はおられます
> > か?
> >
> > または、アプリケーションごとの要件に応じてカスタマイズしやすくす
> > るためには、
> > <kahua-user>はどうあるべきでしょうか?
> >
> >
> >
> >
>
>