我们有一个内置于codeigniter的管理面板,其中有两种类型的用户登录(管理员和超级管理员)。管理员权限由超级管理员控制。管理员权限在登录时存储在会话中。我们使用codeigniter redis库来存储会话数据。
现在,挑战是在超级管理员更改权限时更新管理员用户会话数据而不影响管理员登录。
答案 0 :(得分:0)
如果你想在运行时这样做,我认为使用redis它不应该是一个真正的问题
创建一个预控制器挂钩,如果用户会话已更改,则检查每个请求
因为您使用redis - 您实际上不需要使用数据库查询来检查它 - 只需创建一个对象,该对象包含已更改其会话的所有已更改用户并将其保存到redis
钩子看起来像
class AppRefreshSession
{
private $ci;
public function __construct()
{
$this->ci = get_instance();
}
public function initialize()
{
if (!$this->isSessionValid())
{
//refresh users Session
}
}
private function isSessionValid()
{
$obj = $this->ci->cache->redis->get("ModifiedSessions_Object");
if ($obj->hasSessionModified())
{
return false;
}
return true;
}
}
每当superadmin更改权限时,您的已修改会话对象应填充用户ID或类似内容。 将此对象保存到redis,这应该可以满足您的需求。