Php in_阵列不工作代码点火器
我无法让我的in_数组在我的库上工作。两个函数都在同一个库上。我不会让我这么做的Php in_阵列不工作代码点火器,php,codeigniter,Php,Codeigniter,我无法让我的in_数组在我的库上工作。两个函数都在同一个库上。我不会让我这么做的 $this->user\u auth->haspmission('modify','folder/controller name') 通过使用上述功能,我可以检查是否有修改权限 在我的库函数hasPermission上,$key&$value不起作用 在我的登录功能中,我取消了权限序列化 我不明白为什么hasPermission总是返回false 登录 public function login($username
$this->user\u auth->haspmission('modify','folder/controller name')代码>
通过使用上述功能,我可以检查是否有修改权限
在我的库函数hasPermission上,$key&$value不起作用
在我的登录功能中,我取消了权限序列化
我不明白为什么hasPermission总是返回false
登录
public function login($username, $password) {
$user_query = $this->CI->db->query("SELECT * FROM " . $this->CI->db->dbprefix . "user
WHERE username = " . $this->CI->db->escape($username) . "
AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(" . $this->CI->db->escape($password) . ")))))
OR password = " . $this->CI->db->escape(md5($password)) . ")
AND status = '1'
");
if ($user_query->num_rows() > 0) {
$this->user_id = $user_query->row('user_id');
$this->username = $user_query->row('username');
$this->user_group_id = $user_query->row('user_group_id');
$data_session = array(
'logged' => true,
'user_id' => $this->user_id
);
$this->CI->session->set_userdata($data_session);
$user_group_query = $this->CI->db->query("SELECT permission FROM " . $this->CI->db->dbprefix . "user_group
WHERE user_group_id = '" . (int)$user_query->row('user_group_id') . "'");
$permissions = unserialize($user_group_query->row('permission')); // Vardumps fine.
if (is_array($permissions)) {
foreach ($permissions as $key => $value) {
$this->permission[$key] = $value;
}
}
return true;
} else {
return false;
}
}
public function hasPermission($key, $value) {
if (isset($this->permission[$key])) {
return in_array($value, $this->permission[$key]);
} else {
return false;
}
}
拥有权限
public function login($username, $password) {
$user_query = $this->CI->db->query("SELECT * FROM " . $this->CI->db->dbprefix . "user
WHERE username = " . $this->CI->db->escape($username) . "
AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(" . $this->CI->db->escape($password) . ")))))
OR password = " . $this->CI->db->escape(md5($password)) . ")
AND status = '1'
");
if ($user_query->num_rows() > 0) {
$this->user_id = $user_query->row('user_id');
$this->username = $user_query->row('username');
$this->user_group_id = $user_query->row('user_group_id');
$data_session = array(
'logged' => true,
'user_id' => $this->user_id
);
$this->CI->session->set_userdata($data_session);
$user_group_query = $this->CI->db->query("SELECT permission FROM " . $this->CI->db->dbprefix . "user_group
WHERE user_group_id = '" . (int)$user_query->row('user_group_id') . "'");
$permissions = unserialize($user_group_query->row('permission')); // Vardumps fine.
if (is_array($permissions)) {
foreach ($permissions as $key => $value) {
$this->permission[$key] = $value;
}
}
return true;
} else {
return false;
}
}
public function hasPermission($key, $value) {
if (isset($this->permission[$key])) {
return in_array($value, $this->permission[$key]);
} else {
return false;
}
}
Var转储
array(2) {
["access"]=> array(18) {
[0]=> string(18) "catalog/Categories"
[1]=> string(27) "code_examples/Code_examples"
[2]=> string(23) "dashboard_modules/Chart"
[3]=> string(34) "dashboard_modules/Latest_customers"
[4]=> string(30) "dashboard_modules/Latest_users"
[5]=> string(14) "design/Banners"
[6]=> string(14) "design/Layouts"
[7]=> string(16) "extension/Module"
[8]=> string(15) "module/Category"
[9]=> string(16) "module/Slideshow"
[10]=> string(43) "module_code_examples/Codeigniter_controller"
[11]=> string(38) "module_code_examples/Codeigniter_email"
[12]=> string(39) "module_code_examples/Codeigniter_routes"
[13]=> string(16) "settings/Setting"
[14]=> string(14) "settings/Store"
[15]=> string(8) "tool/Log"
[16]=> string(10) "user/Users"
[17]=> string(17) "user/Users_groups"
}
["modify"]=> array(18) {
[0]=> string(18) "catalog/Categories"
[1]=> string(27) "code_examples/Code_examples"
[2]=> string(23) "dashboard_modules/Chart"
[3]=> string(34) "dashboard_modules/Latest_customers"
[4]=> string(30) "dashboard_modules/Latest_users"
[5]=> string(14) "design/Banners"
[6]=> string(14) "design/Layouts"
[7]=> string(16) "extension/Module"
[8]=> string(15) "module/Category"
[9]=> string(16) "module/Slideshow"
[10]=> string(43) "module_code_examples/Codeigniter_controller"
[11]=> string(38) "module_code_examples/Codeigniter_email"
[12]=> string(39) "module_code_examples/Codeigniter_routes"
[13]=> string(16) "settings/Setting"
[14]=> string(14) "settings/Store"
[15]=> string(8) "tool/Log"
[16]=> string(10) "user/Users"
[17]=> string(17) "user/Users_groups"
}
}
更新这是我如何使用hasPermission的
public function index() {
if (($this->input->server('REQUEST_METHOD') == 'POST') && $this->validateForm()) {
redirect();
}
// load view area & content
}
public function validateForm() {
if (!$this->user_auth->hasPermission('modify', 'folder/controller-name')) {
// Displays error
}
// Other checks.
}
提前感谢您可以编写以下代码来验证权限
function hasPermission($key, $value)
{
foreach($this->permission[$key] as $k=>$v)
{
if($v == $value) return true;
}
return false
}
我对一个简单的php文件做了一些测试:
<?php
$mydata = array(
"test" => array("one", "two", "three")
);
var_dump(hasPermission("test", "two"));
function hasPermission($key, $value)
{
if (isset($mydata[$key]))
{
echo "here";
return in_array($value, $mydata[$key]);
}
else
{
return false;
}
}
?>
回显:布尔值为false
结论:$mydata[$key]不存在
<?php
$mydata = array(
"test" => array("one", "two", "three")
);
var_dump(hasPermission("test", "two", $mydata));
function hasPermission($key, $value, $thearray) //Pass the array through parameter
{
if (isset($thearray[$key]))
{
echo "here";
return in_array($value, $thearray[$key]);
}
else
{
return false;
}
}
?>
回声:“此处”|布尔值为真
结论:in_array()工作正常。您的脚本无法工作,因为hasPermission无法访问您的权限数组 向我们打印此$this->权限代码>我已经添加了var转储我不明白,你什么时候调用haspmission()
?你能添加“完整”的var\u转储吗?不仅仅是一部分?@luke我已经在foreach($k=>v)上添加了权限的完整var转储。错误(
Severity:Warning Message:为foreach()提供的参数无效文件名:libraries/User\u auth.phpp请在haspowmission函数内检查权限数组。使用print\r($this->permission[$key]))我用了第二种方法,但现在缺少了第三个参数消息:User_auth::hasPermission()缺少参数3,在第55行的C:\Xampp\htdocs\codeigniter-3\application\modules\admin\controllers\User\Users\u groups.php中调用,并定义了$this->User_auth->->hasPermission('modify',folder/controller name'))是的,因为正如您在我的脚本中看到的,我在函数中添加了第三个参数,用于获取我要搜索的数组。因此,当您调用它时,将$permission作为第三个参数传递给它。不太确定$this->user\u auth->haspmission的第三个参数是什么('modify','folder/controller',$Not sure what?);我正在尽可能提高我的技能$this->user\u auth->haspowmission('modify'、'folder/controller'、$permissions);
$permissions
是您在login()
函数中构建的数组。您可能需要将其存储在会话中。要清楚,如果您现在这样做,var\u dump($this->permission)
在hasPermission
的第一行,它将不返回任何内容。我是对的?在登录函数中,如果var_dump false,但在登录控制器中,如果设置sessions$permission,我可以很好地查看它。我想你可能是对的,我可能不得不在会话中处理它。