0

私はこの時点で codeigniter を初めて使用し、ほぼすべてのことを行っていますが、php、mysql、ci、および Web アプリケーション開発全般について自分のやり方を感じることである程度の成功を収めています。とはいえ、私は現時点ではちょっと立ち往生しています。だから、私がやろうとしていることについてあなたの意見を得るためにこれを投げ出したかったのですが、できれば私の問題を理解し、解決策を得るために忍耐を持ってください。私はあなたに与えるために最善を尽くしますすべての詳細。

まず、特定の組織への出席の記録を容易にするために、Web アプリケーションを開発中です。組織のすべてのメンバーを保持するメンバー テーブル、組織でロールを保持するメンバーのユーザー名とパスワードを保持するログイン テーブル、組織で保持されるロールを格納するロール テーブル、そして最後に member_role を作成しました。組織で複数の役割を持つ可能性のあるメンバーを説明する表。(もちろん、メンバーへの外部キーを持つ出席表ですが、それは私の現在の質問の範囲外です)。

MySQL コードには、適切なテーブル (memeber、login、role、および member_role) のみが含まれています。

<!-- language: lang-mysql -->
CREATE TABLE `member` (
    `id`                int(10) NOT NULL auto_increment,
    `fname`             varchar(32) NOT NULL,
    `lname`             varchar(32) NOT NULL,
     ...
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE `login` (
    `memberid`          int(10) NOT NULL,
    `username`          varchar(32) NOT NULL,
    `password`          varchar(32) NOT NULL,
FOREIGN KEY (`memberid`) REFERENCES member(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `role` (
    `id`            integer(10) NOT NULL auto_increment,
    `role`          varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `member_role` (
    `memberid`      integer(10),
    `roleid`        integer(10),
    `active`        char(1) NOT NULL,
FOREIGN KEY (`memberid`) REFERENCES member(`id`),
FOREIGN KEY (`roleid`) REFERENCES role(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

これまでのところ、この目的のためにデータベースを定義するという点で、かなり良い仕事をしたと思います。私は初心者なので、初心者が知っていることしか知りません。

ここに私が現在抱えている本当の問題があります。2 つのロールを持つユーザーを作成しました。特定のメンバーの役割の配列であるセッションに適切に保存しています。セッション配列は、roleid 1 と roleid 3 を返します。

各ロール ID に特定のボタンまたは機能が割り当てられているとします。memeberid = 1 の場合、roleid = 1 と roleid = 3 を割り当てたので、roleid = 1 と roleid = 3 で使用できる機能のみを含むページを作成したいだけです。

これは私が立ち往生している場所です。配列はありますが、ユーザー用のページを作成する方法がわかりません。コードをコントローラーまたはビューに配置する必要がありますか? いずれにせよ、roleid = 1 と roleid = 3 に関するボタンのみを含むボタンのページを作成する方法がわかりません。うーん、理解していただければ幸いです。

ご理解いただけましたら、私がこれをどのように達成できるかの例を挙げていただければ幸いです。

御時間ありがとうございます。

4

2 に答える 2

0

車輪の再発明を試みる前の提案... hrm アプリケーションを構築しようとしている場合は、orangehrm を使用して、独自のニーズに基づいて作業してください。

それ以外の場合はこれを使用します

foreach($rolesarray as $currentrole)
    {
    //if currentrole is x then do that, if y then do different.
    }

複数のボタンやディスプレイなどを表示する必要がある場所ならどこでもこれを使用できます

于 2012-05-25T22:26:24.673 に答える
0

なぜメンバーテーブルとログインテーブルを分けているのだろうかと思うことを除けば、テーブルは私には良いように思えます。ログインの列は、各メンバー レコードの単なる追加属性のように見えます。この場合、テーブルを 1 つにマージできます。

グループ 1 と 3 に属する人に適切なボタンを表示することについての質問について -- この組み合わせを持つ人のために 1 つの静的ページを作成することを考えているため、行き詰まっていると思います (おそらく私が間違っている.. ?)。代わりに、誰もがアクセスする 1 つのページを作成し、アクセス許可が要素となるページのそれぞれの領域に if ステートメントを配置して、特定の要素を表示するかどうかを 1 つずつ決定します。たとえば、[開始時間] ボタンに移動し、メンバーが少なくとも 1 つのグループに属している限り表示するロジックを配置します。次に、「管理ダッシュボード」に移動し、メンバーがグループ 3 を持っている場合にのみ表示します (そうでない場合は、コントローラーとビューの両方で要素をスキップします)。あなたの質問を正しく理解できたと思います。

Controller と View のどちらでアクセス許可を確認するかについては、MVC の精神は、この種のロジックを Controller で実行することです。ビューでは、コントローラーがページの特定の領域の情報を準備したかどうかを確認します。ビューが要素を表示するためにコントローラーによって準備された特定のものを必要としない場合 (つまり、管理ダッシュボードへのリンク/ボタンを表示するために準備されたものは何も必要ない場合、その人がグループ 3 に属しているかどうかを知る必要があるだけです) )、コントローラーに $display_management_db_button のような変数を設定させることができます。

最後に、ユーザー認証はどの Web アプリでも必要となる非常に一般的なものであり、CodeIgniter パッケージはユーザー認証用に存在します。私は最近、私が探している軽量と堅牢性の適切な組み合わせのように思われる Ion Auth に出くわしましたが、他の多くのものを検索して見つけることができます。

-ガス


(編集) 例:

コントローラーで:

if($this->member->has_group(3)) { $display_management_db_button=true; }
else { $display_management_db_button=false; }

$data = array('display_management_db_button' => $display_management_db_button;);

$this->load->view('time_screen', $data);

ビューで:

if($display_management_db_button) { echo '<input type="button" ... />'; }

したがって、ロジックはコントローラーに残ります。プログラムが複雑になるにつれて、ロジックを分離することがクリーンなコードを維持する上でより重要になります。

于 2012-05-25T23:49:50.863 に答える