0

私はci 2を使用しており、以前の投稿で、ユーザー認証に最適なライブラリとしてtank_authを推奨していることを見ました。ダウンロードしましたが、tank_auth でアクセスレベルを設定する方法がわかりませんでした。

これを手動で変更する必要がありますか?

users テーブルに group_id フィールドを追加し、登録フォームを微調整して、各新しいユーザーに group_id も保存することを考えていましたが、車輪を再発明するのは嫌いなので、この微調整は既にありますか? または私はそれをハードコーディングする必要がありますか?それを行う最善の方法についての手がかりがない場合は、tank_authコードを台無しにしないでください。

ありがとう

4

1 に答える 1

1

操作される可能性があるため、フォームに hidden(group_id) フィールドを許可したくありません。

group_id のデフォルト値を設定し、管理者から変更してください。

基本的なアイデア/実装:

ユーザーテーブルに追加します

`gid` smallint unsigned not null default 0, //or members default value

-

alter table `users` add index(`gid`);
alter table `users` foreign key(`gid`) references groups(`id`) on delete restrict on update restrict;

- ここでパーミッション列を正規化し、選択肢を増やすことができます

create table `groups`(
id smallint unsigned not null auto_increment primary key,
`name` varchar(20) not null,
`permissions` varchar(255) not null, //JSON object '["read", "edit", "delete", "admin", "super"]'
created_at datetime
)engine=innodb;//or whatever engine you like

-

私の頭の上から

class MY_Controller extends CI_Controller{

     protected $_user;
     protected $_permissions=array();
     protected $_group;
     public function __construct()
     { 
         parent::__construct();

         //check for a user logged in
         $this->_user = ( $user ) ? $user : NULL;

         //if user, get group and permissions
         if($this->_user !== NULL)
         {
             $this->_get_group();
             $this->_get_permissions(); 
         }
     }

     public function _get_group(){
         return $this->_group = $this->_user->group->name; //need to work this bit out
     }

      public function _get_permissions(){
         return $this->_permissions = json_decode($this->_user->permissions, TRUE); 
     }


     public function can_read(){
         return in_array('read', $this->_permissions);
     }

     /// and so on etc
 }
于 2012-12-12T20:16:09.620 に答える