我正在使用 ci 2,我在上一篇文章中看到你推荐 tank_auth 作为用户身份验证的最佳库。我下载了它,但不知道如何在 tank_auth 中设置访问级别。
我应该手动修改这个吗?
我正在考虑在用户表中添加 group_id 字段并调整注册表以将 group_id 也保存给每个新用户,但我不想重新发明轮子所以我的问题是这个调整已经存在了吗?还是我应该硬编码?如果它没有任何关于最好方法的线索,所以我不会弄乱 tank_auth 代码?
谢谢
我正在使用 ci 2,我在上一篇文章中看到你推荐 tank_auth 作为用户身份验证的最佳库。我下载了它,但不知道如何在 tank_auth 中设置访问级别。
我应该手动修改这个吗?
我正在考虑在用户表中添加 group_id 字段并调整注册表以将 group_id 也保存给每个新用户,但我不想重新发明轮子所以我的问题是这个调整已经存在了吗?还是我应该硬编码?如果它没有任何关于最好方法的线索,所以我不会弄乱 tank_auth 代码?
谢谢
您不想在表单中允许隐藏(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
}