likeadmin php 版 ,想加一个机构表institution,然后给每个管理员绑定一个机构 Id(institution_id),每个机构管理登录只能看到该机构下的信息,怎么改造啊?

likeadmin php 版 ,想加一个机构表institution,然后给每个管理员绑定一个机构 Id(institution_id),每个机构管理登录只能看到该机构下的信息,怎么改造啊?
用户545179374
01月09日
|
浏览 25

在 LikeAdmin PHP 版中实现机构隔离,可按以下步骤改造:

1. 数据库改造

  • 新增 institution 表(包含 id、name 等字段)
  • admin 表添加 institution_id 字段(INT,索引)
  • 在所有需要隔离的业务表添加 institution_id 字段

2. 代码层改造

复制代码
// 在管理员登录成功后,将 institution_id 存入 session
Session::set('admin_institution_id', $admin['institution_id']);

// 创建基础查询 Trait
trait InstitutionScope {
    public function scopeInstitution($query) {
        $institutionId = Session::get('admin_institution_id');
        if ($institutionId) {
            return $query->where('institution_id', $institutionId);
        }
        return $query;
    }
}

// 在模型中使用
class UserModel extends Model {
    use InstitutionScope;
    
    public function getList() {
        return $this->institution()->select();
    }
}

3. 权限中间件增强

复制代码
// 在权限验证中间件中增加机构校验
public function handle($request, Closure $next) {
    $adminInstitutionId = Session::get('admin_institution_id');
    $targetInstitutionId = $request->param('institution_id');
    
    if ($targetInstitutionId && $adminInstitutionId != $targetInstitutionId) {
        return json(['code' => 403, 'msg' => '无权限访问该机构数据']);
    }
    
    return $next($request);
}

4. 后台管理调整

  • 管理员列表增加机构筛选
  • 创建/编辑管理员时分配机构
  • 根据登录管理员机构动态过滤下拉选项

关键点:

  • 超级管理员可查看所有机构(需特殊处理)
  • 涉及关联查询时需联表过滤
  • 数据导出/导入需包含机构标识

如需继续排查,请点击下方【🔍追问按钮】提交补充信息

我要提问
复制内容
分享给好友
AI编程问答网 免责声明:
以上内容除特别注明外均来源于网友提问,AI编程问答网回答,权益归原著者所有;