如何向tank_auth添加访问级别

时间:2012-12-12 19:23:01

标签: php codeigniter codeigniter-2 tankauth access-levels

我使用ci 2,我在上一篇文章中看到你推荐tank_auth作为用户身份验证的最佳库。我下载了它,但无法弄清楚如何在tank_auth中设置访问级别。

我应该手动修改吗?

我正在考虑在users表中添加group_id字段,只是调整注册表单以便将group_id保存到每个新用户,但我讨厌重新发明轮子所以我的问题 这个调整已经存在吗?或者我应该硬编码吗?如果它没有任何关于最佳方法的线索,那么我不会弄乱tank_auth代码?

感谢

1 个答案:

答案 0 :(得分: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
 }