2012-12-12 38 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 
}