php - 使用 CodeIgniter 的用户权限系统
问题描述
我正在使用新的 CodeIgniter 重新开发我的系统,并且我正在尝试从我的控制器加载一个函数,该函数将检查用户是否有权查看/访问该功能。
我TEXT
在我的数据库中使用每个用户级别拥有的所有权限,然后将权限保存到我的控制器中使用的会话变量中。
在我的控制器中Users.php
:
public function UserHasPermissions($permission){
checkSession($this);
$arrayPermissions = explode($this->sessions->userdata('session_permissions'));
if(in_array($permission, $arrayPermissions)){
return true;
} else {
return false;
}
}
在我看来home.php
,我正在做以下尝试:
$this->load->view('commons/header');
if($this->Users->UserHasPermissions('ADD_MEETING')){
echo 'content';
}
$this->load->view('commons/footer');
它返回此错误:
An uncaught Exception was encountered
Type: Error
Message: Call to a member function UserHasPermissions() on null
Filename: /var/www/html/DF_CHECKER_CI/application/views/home.php
Line Number: 4
我查看了这些文档,但没有什么对我有太大帮助。
https://www.codeigniter.com/user_guide/general/views.html#adding-dynamic-data-to-the-view
解决方案
您通过尝试从视图调用控制器来破坏 MVC,您应该在呈现视图之前确定用户在控制器中具有哪些权限,无论是在呈现视图的方法中还是在您的类构造函数中。话虽如此,除非您引用单例 CI 实例,否则您不能从 CI 中的视图调用控制器:
$ci = &get_instance();
$this->load->view('commons/header');
if($ci->UserHasPermissions('ADD_MEETING')){
echo 'content';
}
$this->load->view('commons/footer')
然而,这将产生一个错误:
用户类的对象无法转换为字符串
这是一种方法:
class Users extends CI_Controller{ //or whatever you're doing here
public function __construct()
{
// you can check all permissions here if you'd like
}
/**or**/
/**whatever is responsible for calling your view**/
public function index()
{
$data['has_permission'] = $this->userHasPermissions('ADD_MEETING');
$this->load->view('home',$data);
}
private function userHasPermissions($permission)
{
return in_array($permission, $this->sessions>userdata('session_permissions'));
}
}
在您看来:
<?if($has_permission):?>
<--show content-->
<?endif;?>
推荐阅读
- c# - c# winform 让一段代码运行多次
- google-cloud-datastore - 祖先/父母的不同投影查询
- c# - 使用 AngleSharp 解析 CSS
- google-apps-script - 根据候选人是被接受还是被拒绝,从一张纸到另一张纸
- nginx-config - nginx conf~ 文件中的波浪号是什么?
- buefy - Buefy:如何获取上传文件的二进制内容
? - vue.js - 计算属性中的状态操作会在组件加载时产生控制台错误
- java - 是否有一个例外,让我可以处理用户尝试为 UUID 输入过多字符的情况?
- python - 如何从 NumPY 数组创建 OpenCV 映射?
- factor-analysis - 探索性因子分析加载因子