用户发布信息如何带上当前的session,并且只显示当前用户发布的信息
普通管理员或者生成的应用后台 用户发布信息时带上当前session 只能看到自己的信息
第一种:总后台的用户发布自己的信息
首先添加一个session字段 注意字段名必须为 user_id 因为后台用户登录表的 主键id为user_id 该信息登录时已经写入了session(字段必须设置可搜索,可录入)
特别强调:设置session字段 字段要保证后台session数组有字段名称对应的键值
总后台写入session的字段如下:
//数据存储session $userInfo = [ 'username' => $ret['data']['group_name'].'-'.$ret['data']['name'], 'userid' => $ret['data']['user_id'], 'user_id' => $ret['data']['user_id'], 'status' => $ret['data']['status'], 'group_status' => $ret['data']['group_status'], 'nodes' => $access, 'role' => $ret['data']['role'], ];
如需设置其他session值 可以在 admin/service/AuthService.php 里面增加
然后在添加方法绑定user_id 这个字段
那么添加数据时当前用户的 session会被提交写入数据局 (最终效果如下)
生成代码最终如下
//权限检测 禁止普通管理员 操作非当前用户发布的信息 function initialize(){ if(in_array($this->request->action(),['updateExt','update','delete','view'])){ $id = $this->request->param('id','','intval'); $ids = $this->request->param('ids','','intval'); if($id){ $info = LinkDb::getInfo($id); if(session('admin.role') <> 1 && $info['user_id'] <> session('admin.user_id')) $this->error('你没有操作权限'); } if($ids){ foreach(explode(',',$ids) as $v){ $info = LinkDb::getInfo($v); if(session('admin.role') <> 1 && $info['user_id'] <> session('admin.user_id')) $this->error('你没有操作权限'); } } } } /*友情链接*/ function index(){ if (!$this->request->isAjax()){ return $this->display('index'); }else{ $limit = $this->request->post('limit', 0, 'intval'); $offset = $this->request->post('offset', 0, 'intval'); $page = floor($offset / $limit) +1 ; $where['title'] = $this->request->param('title', '', 'strip_tags,trim'); //超级管理员看到所有的信息 普通管理员只能看到自己发布的信息 if(session('admin.role') <> 1){ $where['user_id'] = session('admin.user_id'); } $limit = ($page-1) * $limit.','.$limit; $field = ''; $orderby = ''; try{ $res = LinkService::pageList(formatWhere($where),$limit,$field,$orderby); $list = $res['list']; }catch(\Exception $e){ exit($e->getMessage()); } $data['rows'] = $list; $data['total'] = $res['count']; return json($data); } }
第二种:生成的应用后台用户发布自己的信息
同上面操作一样 只是 session字段 不再设置为 user_id 而是设置为登录模块的 主键id 其它操作同上
如需查看当前应用写入了 那些session 可以直接输出 例如我们创建了一个supplier的应用 可以直接如下查看 :
print_r(session('supplier'));