• 締切済み

プログラム前の段階で悩んでいます。

Perl-CGIに関してお力を貸して頂きたく、投稿します。 今現在、Apache1.3.37にてmod-sslを用いてアップローダサイトを運営しておりますが、 サーバーを単一部署のみの運営から、他部署他地域までをカバーするものにすることになりました。 現時点のビジネスモデル(例です~) ケース:    アクター: 数学の先生(運営者) 生徒(利用者) #運営者から利用者 数学の先生が生徒に宿題、その回答、テストなどを配布します。 生徒は自分のアカウントにベーシック認証/エーリアスのゲートを通って自分のフォルダのドキュメントを回収します。 #利用者から運営者 生徒は、アップロード機能を用い宿題・テストのアップロードをします。 先生は、アップロードフォルダを学内からftpで回収。 先生は、答案を生徒のフォルダにftpで送信 生徒は、答案をアップロード機能を用い、自宅PCなどに回収。 I)ココで、クリティカルエレメントとして、生徒は、他の生徒のユーザー名を見てはいけない。 II)カンニングもあるので、他の生徒のアカウント・フォルダを見れない。 現時点ではココまでは問題なく行われております。 ここで、この運営方式を他教科の先生が聞きつけて、ウチも欲しい!という事になりました。 1)教科毎にサーバーを立ててということは、数学の先生の荷が重過ぎます。(apacheのバーチャル実装も考えましたが、結局、複数のサーバーのメンテは変わりません) 1あ)また、生徒も複数のアカウントを持つのは、送信先を間違えたりする可能性があり、また運用に関してのトレーニングが必要になり、やはり数学の先生は乗り気ではありません。 2)他教科の先生達にftpを使って生徒の提出物を管理させる事は、数学の先生は乗り気ではありません。つまり、教科の先生は、数学の生徒と同じく、WEBからベーシック認証を通り、自分のアップロードフォルダを回収する方向でと考えております。 3)他教科の先生は、生徒一覧が見えてもOKなのですが、生徒は依然として、他生徒のアカウントを見ることは、避けたいのです。 上記IとII参照 4)他の先生が使用することで、今まで無かった、生徒フォルダ内の文書の上書きも生じます。コレは、ftpされると起こる可能性が多くなりますが、web/cgiを用いて、格納時に、学科_教諭名_ファイル名という規則を作るつもりです。 今までは、syukudai_A~Z test_1~n だったのですが~社会科の先生も同名規則になると上書きの可能性もあり、悩んでいる箇所でもあります。 とりあえず、3)で悩んでいます。 つまり、CGIの中で生徒のリストを呼ぶと、生徒がアップロードするとき、他生徒のアカウント名一覧が出てきてしまうような~気がするのです。 ==少しだけ、本来のビジネスモデルを~== 実際、生徒なら問題無いのですが、価格競争コンペなどに用いているために、他生徒(下請け他社)に、何処に情報を出しているか?絶対に知られたくないという、絶対的なリクアイヤメントが生じます。 1)じゃ~ベンダの名前がわからないようにアカウントを作ればいいじゃん!   >すでに、数学の先生は、アカウントを多数持っておりますし、生徒フォルダの同期や、すでに制作したアカウント制作のスクリプトなどを使いたいと思っています。 2)送りと受けのサーバーを別にしたら?   >公的認証機関を用いSSLを使っていますので、年あたり1000ドルかかります。出来れば、サーバー数・ドメイン数は減らしたいのです。 3)数学の先生はプライベートでこのサーバーを持っていますが、転任時も考えられるので、他教諭用のサーバーを学校の校費を用いて購入する予定です。つまり、1台は別に新築することになっています。 質問は、、、 1)テンパッてしまって、自分でも良く分からなくなっているので、こうしたら~あーしたらという漠然な意見が沢山欲しいのです。 2)順次必要なコード、システム構成は載せて行きたいのですが~何を載せて良いのか?悪いのか?判断しかねるところがあります。 3)同じようなソリューションがあれば、教えていただけると大変助かります。探しても、複雑なアップロードをするものがみあたりませんでした。 4)とりあえず、webDAVなども考えたのですが~教頭先生からダメ!といわれてしまったので、、、(教頭をギャフンと言わせれるだけの入れ知恵でも助かります)

みんなの回答

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.4

こんにちは、#1です。 >cgiについてちょっとヒントをいただければ助かるのですが、、、、 う~ん、答えになるかどうか分かりませんが。 例えばですけど、 IDとパスワードを要求して、DB とかにチェックかけて、OKなら、 セッションを生成して、cookie にセッションIDをセットして、 メニューにリダイレクトするCGIを書く。 セッションIDを渡したら、ユーザーをオブジェクトにした物を返すモジュールを書く。 あとは、各処理の最初で生成したオブジェクトに権限を聞いて、 ダメなら、エラーを出すとか、別なページへリダイレクトするようにすればいいんじゃないすか? はしょり過ぎですかね。 やり方はたくさんあるでしょうから、例えばって事で。

  • W_H
  • ベストアンサー率47% (21/44)
回答No.3

とある一組織の管理ページを作り、管理しているものです。一応ボランティアの仕事かつ製作者と使用者の大半が十代なので、そんなに深くは答えられませんが、参考になれば。 ある程度見る限り、CGIでページを作ってしまうのが楽かなと思います。 まず、先生モードと生徒モードの二つをページに用意します。これらは多分別のCGIの方が無難でしょう。 生徒用: 手始めに、IDと生徒名などとクラスや出席番号などの情報をリンクさせる用意をする。 簡単にIDと名前とかでログインできるようにして、ページに入るとメニューに数学とか英語とか言う画像ボタンがあり、提出する科目によりページを分ける。 提出ページに行くと、アップローダーとして、[ ][参照]みたいなフォームがあるので、それでファイルを選んでアップロード。この時に英語のフォルダの中の、クラスのフォルダの中などを指定すれば、多分先生も楽になる。(3年5組12番の生徒:数学/3/5/12.txt 見たいな感じのフォルダ構成。) もしダウンロードさせたいなら、ダウンロードページを一括して作り、新しく追加されるごとにNEWと言う表示をつけたり、ダウンロードしたらNEWマークを消したり、先生が誰がダウンロードしたか分かるようにファイルにカウントやログをつけるなどを同時にすれば、まぁまぁ分かりやすいのではないのでしょうか? 教師用: 初めに、先生のIDと名前で、教科や担当クラスなどが優先的に表示させることができるよう情報をリンクする用意をする。 IDと名前でログインすると、自分の教科が上の方に表示され、それぞれの教科をクリックすると、担当クラスが上に表示される。(色つきもいいかも。) 一応他の先生がサポートできるように、上記のように面倒なことをするのも手ですし、そんなのいらない、と思うならなくしてもいいと思います。 各クラスのフォルダをクリックすると、ダウンロードページに行きます。ここからが難なのですが、まとめてダウンロードができないんですよね。普通にリンク張ったら。(さらにいちいち右クリックでダウンロードなので、面倒くさい。確かあるフォルダ内のファイルにアクセスすると、すべてダウンロードダイアログを出す、.htcossの処理があったはず。[ForceType application/octet-stream]を.htcossに記述してフォルダに入れればいいと昔のメモ帳に書いてあった。) ただし、絶対に上書きなどのことはありませんし、削除してもゴミ箱を用意して復活できるようにしておけば、消えてなくなる可能性も減るでしょう。(削除ボタンは作らないといけないですね。多分。) ついでに、生徒たち共通のダウンロード用ページにファイルをアップできる機能と、生徒個々の個人フォルダにアップできる機能をつければ、例えば何かの答えの配布などもできるでしょう。 一応、他の生徒が他の生徒のページを見ないこと。先生は一覧で見れ、上書きをしないこと。フォルダを多く作り、教科の中にクラスなど、階層が深くなる代わりに学科_教諭_……などと面倒なファイル名に書き換える必要がないこと。(出席番号でもいい。)くらいは実現できていると思います。 ダウンロードとフォルダ構成が深く多いことに難ありですが、生徒のアップロードは楽ですし、操作に迷うことはないでしょう。 とにかく基本は、生徒:アップダウンローダー。教師:ファイラー。をイメージしています。(FTPの機能を分割したと考えてもらえれば。) 長文乱文CGIの構成とフォルダの構成が複雑ですいません。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

フォルダー分けとパスワードまたはIDでのアクセス制限が入り組んでいるってことですか? 確かにftpソフトじゃまず無理ですね。ベーシック認証のみでもたぶん難しいでしょう。 perlで管理用cgiを全部書くなら アクセス制限の範囲を規定したデータファイルを別に用意して、それを参照しながらってところでしょうか? A:各生徒データのディレクトリ構成:各生徒別データディレクトリの下に教科別データディレクトリ(教科ごとのディレクトリ名は一定にするようcgi側で管理して作ればよいはず) B:生徒が参照する時は、生徒名ディレクトリ内のみを全部リストアップして一覧する。書き込みもこの中のみ。 たぶん、Aの構成なら、生徒用は、ベーシック認証で生徒用ディレクトリのみに限定できるから生徒用は、此までどおりで、内部の教科別ディレクトリを一覧するように拡張すればいいだけかな? C:教科の先生が参照する時は、各生徒ディレクトリ内の該当教科名ディレクトリ内のみ参照書き換えokとする。 参照のみ他の先生にも見えていいなら、一覧は全部出るようにしておいて、書き込みは、教師IDと教科名ディレクトリが一致しなければ書き込まないようプログラム側で制御。 たぶんベーシック認証では全生徒のディレクトリにアクセス権を与えることになるので、この教科別アクセス制御は完全に管理用プログラムで行う必要があるでしょう。 D:アクセス制限情報ファイルに必要な情報は、 各閲覧ID、書き込みパスワード(暗号化後データ)、生徒/教師の区別、生徒名or教師名or教科名(一覧時に使用)、書き込み可能ディレクトリ名 管理cgiを教師用と生徒用に分けるなら、このアクセス制限情報ファイルも分けてもいいでしょう。 生徒数と教師数とを足した件数が数100件やそこらならcsvファイルで作ってもたいしたアクセス時間のロスは無いと思うけど、 perl moduleのSDBM_File.pm などが利用できるなら、IDとパスワードから許可ディレクトリ名を探すプログラムは作りやすいかも。 1000件を超えるようなら、本格的SQLデータベースを使った方がいろいろと管理しやすくなるかとも思います。 E:次に各種作業用ページにおいてもIDとパスワードのチェックが必要となりますが、perl moduleの IO::SessionSetなどを使うと便利です。 実際のプログラムは、もっと作業要件を絞り込んでひとつひとつ積み上げていく必要があるのではないでしょうか。

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.1

こんにちは、 単に、見せたい人と見せたくない人がいるって事なんですか? それなら、アップロード先をサーバーのドキュメントルート外にして、 アップされた物にアクセスするCGIを書けば済むんじゃないですかね? 外してたらすんません。

harudad
質問者

補足

アパチのconf内ですでに、 alias / ~~ / と <directory ~~> ~~ </directory> として、ドキュメントルート外に飛ばしております。 ユーザーは、ベーシック認証後 /data/webuser/~~ に飛ばされることになっています。 CGIは、ベーシック認証で使ったユーザー名のフォルダを見に行く構造を取っているのですが、準アドミン的な存在(他教科の経論)のため、受け取り者が一人ではなく多数になること。 また受け取り者は、送信者のすべてのアカウントにアクセスすること、など、ここら辺で、かなり頭を悩ませております。 ベーシック認証後、アカウント毎にCGIを用意(2セット)1セット目は先生用、2セット目は学生用。 先生用は生徒と先生へのアップロードが可能で、2セット目は先生達のみにする。 ハードコードではなく、スマートなやり方を考えております。 生徒は、1月に1人づつくらい増えて行き、先生の数はあまり増えません。 全然というか外していません。というか~その、cgiについてちょっとヒントをいただければ 助かるのですが、、、、 難しいですね。。。。

関連するQ&A

専門家に質問してみよう