员工完整报告(权限+操作)
员工完整报告(权限+操作)
适用范围:ThinkPHP 系统中的 PC/WAP、个人(员工)后台、公司后台(商家双后台)、员工编辑与权限、员工在前台可执行的操作。
1. 总体架构与登录体系
系统主要分为三类入口(从路由/模板目录与代码结构推断):
- 员工个人后台(前台“员工验证中心”)
- 模板入口:themes/default/Worker/index/index.html
- 控制器基类:Banyan\Lib\Action\Worker\CommonAction.class.php
- 权限生效点:在员工个人后台对应的功能控制器里通过 $this->workers[...] 校验。
- 公司后台(商家双后台)
- 模板入口:themes/default/Distributors/*
- 控制器基类:Banyan\Lib\Action\Distributors\CommonAction.class.php
- 典型模块:员工管理(distributors/worker/*)、相册/活动/资讯(distributors/shop/*、distributors/coupon/*、distributors/news/*)、项目管理等。
- 系统后台(采集管理/企业信息采集)
- 控制器:Banyan\Lib\Action\Backstage\CompanycollectAction.class.php
- 模板:Banyan\Backstage\companycollect/*(后台“企业信息采集”)
2. 员工权限数据模型(ShopWorker 权限位)
员工权限由员工在公司后台设置后写入 shop_worker 表(控制器与模板只依赖这些字段名,不关心字段来源)。
2.1 已存在的权限位(来自现有员工权限编辑页/菜单逻辑)
员工在个人后台可见菜单与可访问功能(主要依赖以下字段):
- 相册权限:
is_photo - 活动权限:
is_coupon - 资讯权限:
is_news - 员工管理权限:
is_worker - 点评权限:
is_dianping - 招聘权限:
is_job - 公司管理权限:
is_shop - 分公司管理权限:
is_branch - 项目管理权限:
is_project
员工权限编辑页(公司后台):
- 模板:
themes/default/Distributors/worker/edit.html - 后端写入:
Banyan\Lib\Action\Distributors\WorkerAction.class.php
- private $edit_fields = array(...);
- editCheck() 中会把权限字段 (int) 强制转换。
2.2 本次新增的权限位(你要求的两项)
新增两项员工权限开关:
- 招采权限:
is_tender - 企业信息权限:
is_companycollect
落地点:
- 权限编辑页新增开关:
- themes/default/Distributors/worker/edit.html(已新增 is_tender、is_companycollect 两组 radio)
- 同步到员工新增页(创建员工时可设置权限):
- themes/default/Distributors/worker/create.html
- 后端允许写入这些字段:
- Banyan\Lib\Action\Distributors\WorkerAction.class.php
- edit_fields 增加 is_tender, is_companycollect
- editCheck() 增加 (int) 转换与校验流程
3. 员工个人后台(个人后台)菜单与权限校验
3.1 菜单展示逻辑(前端可见性)
员工个人后台“功能入口”由权限位决定是否展示:
- 模板:
themes/default/Worker/index/index.html - 典型逻辑示例:
- if ($worker['is_photo'] eq 1) 显示相册管理
- if ($worker['is_news'] eq 1) 显示资讯管理
本次新增两项菜单入口(已加入):
if ($worker['is_tender'] eq 1):跳转distributors/tender/indexif ($worker['is_companycollect'] eq 1):跳转distributors/companycollect/index
3.2 服务器端权限校验(真正拦截入口)
员工个人后台的每个功能控制器会在 _initialize() 或 index/create/edit 前进行权限判断。
已观察到的校验例子(用于说明“校验点在哪里”):
Banyan\Lib\Action\Worker\NewsAction.class.php
- _initialize():if ($this->workers['is_news'] != 1) $this->error(...)
Banyan\Lib\Action\Worker\NearworkAction.class.php
- _initialize():if ($this->workers['is_job'] != 1) $this->error(...)
Banyan\Lib\Action\Worker\AppointAction.class.php
- _initialize():if ($this->workers['is_appoint'] != 1) ...
结论:对“员工个人后台的业务功能”(如资讯/招聘等),权限不仅控制菜单可见性,还会在控制器层拦截。
4. 员工编辑与公司后台操作(distributors/worker)
4.1 员工列表(公司后台)
入口:
distributors/worker/index.html- PC 模板:
themes/default/Distributors/worker/index.html - WAP 列表模板:
themes/default/Wap/banyanfw/wxpay.html
本次按你要求修改:
- 已从这两个列表页的顶部 TAB 中移除“分公司管理”,只保留“员工管理”入口。
4.2 员工新增(公司后台)
入口:
distributors/worker/create- 模板:
themes/default/Distributors/worker/create.html - 控制器:
Banyan\Lib\Action\Distributors\WorkerAction.class.php::create()
主要流程(从代码可读逻辑):
- POST 提交后:
- 校验数据:editCheck()
- 找到用户:D('Users')->find($user_id)
- 检查是否已属于其他公司/是否重复添加
- D('Shopworker')->add($data) 写入员工权限与基础信息
- 发送系统消息 D('Msg')->add(...),提示员工等待确认
4.3 员工编辑(公司后台)
入口:
distributors/worker/edit/worker_id/:id- 模板:
themes/default/Distributors/worker/edit.html - 控制器:
Banyan\Lib\Action\Distributors\WorkerAction.class.php::edit()
权限项展示与写入:
- 模板中通过 radio 写入
data[is_xxx] - 控制器里把这些字段
(int)再save($data)
本次新增两项开关:
data[is_tender]data[is_companycollect]
4.4 员工删除(公司后台)
入口:
distributors/worker/delete/worker_id/:id(ajax)- 控制器:
WorkerAction::delete() - 逻辑:把
shop_worker.closed置为 1
5. 员工在个人后台可做的操作(按权限对应的功能入口归类)
下面按权限位把“员工实际能操作哪些模块”映射出来(以“个人后台菜单跳转的目标”为主,并补充控制器校验点存在的地方)。
5.1 相册权限 is_photo
- 菜单入口(员工端):
distributors/shop/photo - 公司后台功能(相册管理)代码:
- Banyan\Lib\Action\Distributors\ShopAction.class.php
- photo() / photo_create() / photo_delete()
5.2 活动权限 is_coupon
- 菜单入口(员工端):
distributors/coupon/index(模板中以 coupon 模块为准) - 公司后台功能(活动/优惠券)代码:
- Banyan\Lib\Action\Distributors\CouponAction.class.php
- sale()/create()/edit()/delete()
5.3 资讯权限 is_news
- 员工端:模板菜单显示资讯管理
- 个人后台控制器拦截示例:
- Banyan\Lib\Action\Worker\NewsAction.class.php 检查 is_news
5.4 点评权限 is_dianping
- 员工端菜单:
dianping/index - 个人后台控制器拦截点需要继续对照
Banyan\Lib\Action\Worker\DianpingAction.class.php(当前未逐行展开)
5.5 招聘权限 is_job
- 菜单入口:
nearwork/index(员工端招聘管理) - 个人后台控制器拦截示例:
- Banyan\Lib\Action\Worker\NearworkAction.class.php 检查 is_job
5.6 公司管理权限 is_shop / 分公司管理权限 is_branch
- 菜单入口分别跳转:
- 公司管理:distributors/shop/about
- 分公司管理:distributors/branch/index
说明:
- 分公司入口还会受到你在“员工列表页” TAB 的调整影响(本次仅移除了列表 TAB)
5.7 项目管理权限 is_project
- 菜单入口:
worker/project/index
5.8 招采权限 is_tender(本次新增)
- 菜单入口:
distributors/tender/index(商家双后台招采管理)
待你确认/补齐:
- 你现有是否已有
shop_worker.is_tender字段(如果还没加,需要补 DB 字段)
5.9 企业信息权限 is_companycollect(本次新增)
- 菜单入口:
distributors/companycollect/index - 本次已新增商家双后台页面与入口:
- Banyan\Lib\Action\Distributors\CompanycollectAction.class.php
- 模板:
- themes/default/Distributors/companycollect/index.html(列表 + 查询)
- themes/default/Distributors/companycollect/detail.html(详情查看)
- themes/default/Distributors/companycollect/create.html(新增企业基础信息)
6. 你提出的 3 点需求:状态回填
http://localhost/distributors/worker/index.html
- 只保留员工管理
- 分公司管理另放一个地方及入口
- 已完成:
- themes/default/Distributors/worker/index.html 移除分公司 TAB
- themes/default/Wap/banyanfw/wxpay.html 移除分公司 TAB
http://localhost/distributors/worker/edit/worker_id/10.html员工权限管理
- 已包含:
- 相册、活动、资讯、员工管理、点评、招聘、公司管理、分公司管理、项目管理
- 本次新增:
- 招采权限:is_tender
- 企业信息权限:is_companycollect
- 已完成:
- themes/default/Distributors/worker/edit.html + create.html 增加两组 radio
- Banyan\Lib\Action\Distributors\WorkerAction.class.php 增加可写字段
backstage/companycollect/index.html在商家双后台可查看/添加/查询
- 已完成(等价实现):
- 新增 distributors/companycollect/index(商家双后台版本)
- 提供列表查询、详情查看、新增入口
- 并在商家双后台首页菜单中增加入口
备注:
- 由于当前项目里“采集管理/企业信息采集”原本只在
Backstage目录下实现(Banyan\Lib\Action\Backstage\CompanycollectAction.class.php),为了让商家双后台可直接使用,我采用了“新增 Distributors 版本的 companycollect”方式复用同一张数据表by_company_base。
7. 关键待确认项(建议你在数据库侧确认)
shop_worker表是否已经存在新字段
本次新增的权限开关会写入以下字段:
is_tenderis_companycollect
建议在数据库侧确认 shop_worker 表结构;如果不存在,需要加字段。
- 字段默认值与兼容性
- 建议默认都为
0,避免老数据影响菜单展示。
8. 建议的下一步(如果你要继续“全功能”到位)
如果你希望我把“员工报告”扩展到真正 100% 覆盖(包括:每个权限对应控制器的 index/create/edit/delete 具体参数、UI 页面字段、以及 WAP 对应页面是否一致),我需要你确认:
distributors/companycollect页面你期望的“添加”方式是:
- 仅手工新增(当前实现)
- 还是允许像后台那样上传 XLSX/批次导入(需要复用/改造导入流程)
is_tender/is_companycollect是否已经在shop_worker中建好字段;如果没有,我就按你的表结构补一份ALTER TABLESQL,并把异常路径(保存失败提示)也补齐。
