2012-12-12 32 views
0

我使用ci 2和我在前面的帖子中看到,您推薦tank_auth作爲用戶身份驗證的最佳庫。我下載了它,但無法弄清楚如何在tank_auth中設置訪問級別。如何將訪問級別添加到tank_auth

我應該手動對此進行修改嗎?

我想在用戶表中添加group_id字段,只是調整註冊表單,以保存group_id給每個新用戶,但我不想重新發明輪子,所以我的問題 已經在這裏調整?或者我應該硬編碼它?如果它沒有任何線索最好的方式來做到這一點,所以我不會弄亂tank_auth代碼?

感謝

回答

1

你不想讓一個隱藏(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 
}