吉日权限系统4.2源码是一套基于RBAC模型的后台权限管理框架,适合中小型项目快速搭建用户、角色、菜单和按钮级控制,它默认提供部门数据隔离、操作日志和接口鉴权,源码结构清晰,主要模块放在application/admin、application/api和extend/auth目录下,很多团队拿它做二次开发时,最常改的是权限规则校验和菜单渲染逻辑。
拿到源码后先看根目录的composer.json和.env.example,4.2版本要求PHP 7.2以上,MySQL 5.7或8.0,把.env.example复制为.env,填写数据库账号、密码和站点域名,然后导入根目录下的jiri_auth_4.2.sql文件,这个SQL里已经建好了admin、auth_rule、auth_group、auth_group_access四张核心表,其中auth_rule的condition字段支持额外条件表达式,比如{"type":"eq","field":"status","value":1}。
安装完成后访问域名/admin进入后台,默认账号admin密码123456,登录后第一件事是去系统设置里改后台入口路径,默认是admin,可以改成类似manage_2024这样的随机字符串,减少扫描风险,接着在权限管理里新建一个测试角色,只勾选“文章列表”和“文章编辑”两个节点,然后创建一个测试用户绑定该角色,退出重登验证菜单是否只显示这两个功能。
吉日权限系统4.2源码的权限节点分三种类型:菜单、按钮和接口,菜单节点在auth_rule表里type=1,按钮type=2,接口type=3,新增节点时title写中文名称,name写控制器/方法格式,比如article/index,如果某个接口需要单独鉴权,把name写成api/article/save,然后在对应控制器里调用$this->auth->check('api/article/save'),数据隔离靠auth_group表的data_scope字段,0表示全部数据,1表示本部门及子部门,2表示仅本部门,3表示仅本人。
举个例子,销售角色设置data_scope=2,那么该角色下的用户只能看到自己部门创建的订单,如果业务需要跨部门共享,可以在auth_rule里给特定节点加condition条件,比如{"type":"in","field":"dept_id","value":"1,2,5"},注意condition是JSON字符串,写错会导致权限校验直接返回false,调试时打开config/app.php里的app_debug为true,错误页会显示具体哪条规则解析失败。
第一个坑是缓存,4.2源码默认把权限规则缓存在runtime/auth目录下,修改auth_rule表后如果不删缓存,前台菜单不会更新,手动删除该目录下所有文件,或者在后台点“清除缓存”按钮,第二个坑是超管判断,源码里用$this->auth->isSuperAdmin()判断用户ID是否为1,如果你把超管ID改成别的,记得同步改config/auth.php里的super_admin_id,第三个坑是AJAX接口返回格式,权限不足时默认返回{"code":0,"msg":"无权限"},前端拦截器要统一处理code=0的情况,否则用户会看到空白页。
实际开发中建议把权限校验写成中间件,而不是在每个控制器里手写check,吉日权限系统4.2源码已经提供了Auth中间件,你只需要在路由文件里加上->middleware(['Auth']),另外日志表auth_log会记录每次鉴权失败的操作,定期清理该表可以避免数据库膨胀,建议每月执行一次DELETE FROM auth_log WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY)。
吉日权限系统4.2源码上手快,但配置权限节点时一定要对应好控制器方法名,数据隔离范围要结合组织结构表来设,部署后先改后台入口、删默认测试账号、开启操作日志,二次开发时优先用中间件而不是硬编码,遇到菜单不刷新先清runtime/auth缓存,遇到接口403先检查auth_rule的condition字段是否合法。