Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter中的动态菜单和角色权限_Php_Mysql_Arrays_Codeigniter - Fatal编程技术网

Php codeigniter中的动态菜单和角色权限

Php codeigniter中的动态菜单和角色权限,php,mysql,arrays,codeigniter,Php,Mysql,Arrays,Codeigniter,你好,Guyzz我是codeigniter的新手,我需要帮助登录系统中的角色库, 我有两个表,第一个是分类表,第二个是用户注册表 在第二个表中,像这样存储的类别_id为1,2,3,那么是否可以获取该id 请给我建议和解决方案我是CI新手, 给我一些关于动态菜单和基于角色的登录访问的指导 类别: 用户: 永远不要用这种方式! 创建两个不同的表(用户、用户组)。在用户表组id中添加一列,然后使用join函数获取主题 有关更多信息,请参阅 如果您不明白,请将您的表格数据发布在此处,我将帮助您:-)永远

你好,Guyzz我是codeigniter的新手,我需要帮助登录系统中的角色库, 我有两个表,第一个是分类表,第二个是用户注册表


在第二个表中,像这样存储的类别_id为1,2,3,那么是否可以获取该id

请给我建议和解决方案我是CI新手, 给我一些关于动态菜单和基于角色的登录访问的指导

类别:

用户:

永远不要用这种方式! 创建两个不同的表(用户、用户组)。在用户表
组id
中添加一列,然后使用
join
函数获取主题 有关更多信息,请参阅


如果您不明白,请将您的表格数据发布在此处,我将帮助您:-)

永远不要再使用这种方式! 创建两个不同的表(用户、用户组)。在用户表
组id
中添加一列,然后使用
join
函数获取主题 有关更多信息,请参阅

如果您不明白,请将您的表数据发布在此处,我将帮助您:-)

这是我的(post、post\u tax、post\u tax\u relation)表屏幕截图。我想它能帮你做你需要的事。 请记住,在
create
update
用户上,您必须更新关系表(我的意思是删除所有引用该用户的关系,并在每次更新时创建新的关系)。

这是我的(post、post\u tax、post\u tax\u关系)表屏幕截图。我想它能帮你做你需要的事。 请记住,在
create
update
用户上,您必须更新关系表(我的意思是删除所有引用该用户的关系,并在每次更新时创建新的关系)。


数据库表示例:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(100) NOT NULL,
  `last_name` varchar(100) NOT NULL,
  `username` varchar(100) NOT NULL,
  `password` text NOT NULL,
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `users` (`user_id`, `first_name`, `last_name`, `username`, `password`, `create_at`) VALUES
(1, 'ali', 'qorbani', 'aliqorbani', '63bed66f3d9dcd13440490d90738f816', '2018-07-28 08:34:01'),
(2, 'mohammad', 'ahmadi', 'mohammad', '316946a88ad51d75465c4c0b1e4a066a', '2018-07-28 08:34:01');


CREATE TABLE IF NOT EXISTS `user_groups` (
  `group_id` int(11) NOT NULL AUTO_INCREMENT,
  `group_name` varchar(100) NOT NULL,
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`group_id`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `user_groups` (`group_id`, `group_name`, `create_at`) VALUES
(1, 'superadmin', '2018-07-28 08:35:56'),
(2, 'admin', '2018-07-28 08:35:56'),
(3, 'moderator', '2018-07-28 08:36:12'),
(4, 'customer', '2018-07-28 08:36:12');

CREATE TABLE IF NOT EXISTS `user_roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`),
  KEY `user_id` (`user_id`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `user_roles`
  ADD CONSTRAINT `user_roles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `user_roles_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
您的型号的代码如下所示

//用户模型

public function add($data){
    $this->db->insert('users',$data);
    return true;
}
public function update($data,$id){
    $this->db->where('user_id',$id);
    $this->db->update('users',$data);
    return true;
}

public function add_user_roles($user_id,$roles = array()){
    $this->db->where('user_id',$user_id);
    $this->db->delete('user_roles');
    foreach ($roles as $role){
        $this->db->insert('user_roles',['user_id'=>$user_id,'group_id'=>$role]);
    }
    return true;
}
您的控制器编辑方法的示例如下:

//Users controller
public function edit($user_id){
    if($this->form_validation->run() == FALSE) {
        $data_view['user'] = $this->User_model->get_user($user_id);
        $this->load->view('user_edit',$data_view);
    }else{
    $first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));
    $user_roles = $this->input->post('roles');
    $data_user_update = array(
        'first_name'    =>  $first_name, 
        'last_name'     =>  $last_name, 
        'username'      =>  $username, 
        'password'      =>  $password
    );
    $this->User_model->add_user_roles$user_id,$user_roles);
    $this->User_model->update($data_user_update,$user_id);
    $this->session->set_flashdata('success','user updated correctly');
    redirect('users/edit/'.$user_id);
    }
}

数据库表示例:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(100) NOT NULL,
  `last_name` varchar(100) NOT NULL,
  `username` varchar(100) NOT NULL,
  `password` text NOT NULL,
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `users` (`user_id`, `first_name`, `last_name`, `username`, `password`, `create_at`) VALUES
(1, 'ali', 'qorbani', 'aliqorbani', '63bed66f3d9dcd13440490d90738f816', '2018-07-28 08:34:01'),
(2, 'mohammad', 'ahmadi', 'mohammad', '316946a88ad51d75465c4c0b1e4a066a', '2018-07-28 08:34:01');


CREATE TABLE IF NOT EXISTS `user_groups` (
  `group_id` int(11) NOT NULL AUTO_INCREMENT,
  `group_name` varchar(100) NOT NULL,
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`group_id`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `user_groups` (`group_id`, `group_name`, `create_at`) VALUES
(1, 'superadmin', '2018-07-28 08:35:56'),
(2, 'admin', '2018-07-28 08:35:56'),
(3, 'moderator', '2018-07-28 08:36:12'),
(4, 'customer', '2018-07-28 08:36:12');

CREATE TABLE IF NOT EXISTS `user_roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`),
  KEY `user_id` (`user_id`),
  KEY `group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `user_roles`
  ADD CONSTRAINT `user_roles_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `user_roles_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `user_groups` (`group_id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
您的型号的代码如下所示

//用户模型

public function add($data){
    $this->db->insert('users',$data);
    return true;
}
public function update($data,$id){
    $this->db->where('user_id',$id);
    $this->db->update('users',$data);
    return true;
}

public function add_user_roles($user_id,$roles = array()){
    $this->db->where('user_id',$user_id);
    $this->db->delete('user_roles');
    foreach ($roles as $role){
        $this->db->insert('user_roles',['user_id'=>$user_id,'group_id'=>$role]);
    }
    return true;
}
您的控制器编辑方法的示例如下:

//Users controller
public function edit($user_id){
    if($this->form_validation->run() == FALSE) {
        $data_view['user'] = $this->User_model->get_user($user_id);
        $this->load->view('user_edit',$data_view);
    }else{
    $first_name = $this->input->post('first_name');
    $last_name = $this->input->post('last_name');
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));
    $user_roles = $this->input->post('roles');
    $data_user_update = array(
        'first_name'    =>  $first_name, 
        'last_name'     =>  $last_name, 
        'username'      =>  $username, 
        'password'      =>  $password
    );
    $this->User_model->add_user_roles$user_id,$user_roles);
    $this->User_model->update($data_user_update,$user_id);
    $this->session->set_flashdata('success','user updated correctly');
    redirect('users/edit/'.$user_id);
    }
}

创建一个
m:n
-
user\u category
表,因为这很麻烦,如果您将关系保存为逗号分隔的字符串…,但是可能的解决方案是使用
find\u in\u set
查看此处“category\u id像这样存储1,2,3”不要这样做。看见你想要一个。谢谢你先生@sintakonten如何加入,我有这个1,2,3@AlexHowansky“那么如何加入”也许可以阅读我发布的链接?创建一个
m:n
-
user\u category
表,因为这很痛苦,如果你把你的关系保存为逗号分隔的字符串。。。,尽管如此,一个可能的解决方案可能是使用
find_in_set
查看此处“category_id像这样存储1,2,3”不要这样做。看见你想要一个。谢谢你先生@sintakontethen how join,我想要这个1,2,3@AlexHowansky“then how join”也许可以阅读我发布的链接?第一个表中的作者是什么?第一个表中的作者是什么?另一件我忘记的事情是视图。使用具有组ID值的多个复选框(您也可以从数据库中获取它们并将其作为数组传递给视图,然后使用
foreach($key=>roles$value)
在内部循环使用
form\u checkbox($value,$key)
我忘记的另一件事是查看。使用具有组ID值的多个复选框(您也可以从数据库中获取它们,并将其作为数组传递给视图,然后使用
foreach($key=>roles$value)
循环使用
form\u复选框($value,$key)