门店用户、角色、权限设置详解
生成时间:2026年5月15日
路径:/www/wwwroot/lingshou/Application/Retail/
相关控制器:StoreRolesController、StoreJurUsersController、MerchantRolesController、MerchantJurUsersController、JurisdictionController
相关模型:JurisdictionGroupModel、JurisdictionListModel、JurisdictionUserModel、JurisdictionGroupModel
一、权限体系架构
1.1 层级关系
商户 (merchant_id)
│
├── 商户用户 (MerchantJurUsers)
│ └── 商户角色 (MerchantRoles)
│ └── 商户权限 (Jurisdiction)
│
└── 门店 (store_id)
├── 门店用户 (StoreJurUsers)
│ └── 门店角色 (StoreRoles)
│ └── 门店权限 (Jurisdiction)
│
└── 权限设置 (JurisdictionController)
1.2 用户类型 (user_type)
| user_type |
说明 |
| 2 |
店长 |
| 4 |
店员/收银员 |
1.3 权限类型 (type)
| type |
说明 |
| 1-6 |
基础权限范围 |
| 705, 709, 1322, 684, 693 |
隐藏权限(店长以下账号不可见) |
二、门店角色管理 - StoreRolesController
文件: Application/Retail/Controller/StoreRolesController.class.php
2.1 功能方法列表
| 方法 |
用途 |
说明 |
index |
角色管理首页 |
展示门店所有角色列表 |
getRoles |
获取角色列表 |
AJAX分页获取角色数据 |
rolesAdd |
添加角色页面 |
选择权限、设置售价限定 |
getAllJurList |
获取权限树 |
获取当前用户可分配的权限树形结构 |
getAllJurListRow |
获取权限列表 |
按user_type获取权限,支持多级嵌套 |
buildTree |
构建权限树 |
递归构建权限树形结构(最多5级) |
getAllChildIds |
获取子权限ID |
递归获取所有子权限ID |
rolesAddAjax |
提交角色 |
新增/编辑角色 |
changeStatus |
启用/禁用角色 |
切换角色状态 |
rolesDel |
删除角色 |
删除角色(需无用户关联) |
2.2 角色设置项
| 设置项 |
说明 |
选项/值 |
| 角色名称 |
角色标识名称 |
必填,唯一 |
| 是否启用 |
角色启用/禁用状态 |
开启/关闭 |
| 售价限定 |
是否限制商品售价 |
开启/关闭 |
| 售价限定类型 |
当开启售价限定时 |
不低于售价比例 / 不得低于批发价 |
| 售价比例 |
当选择"不低于售价比例"时 |
百分比数值(0-100) |
| 权限列表 |
可分配的功能权限 |
多级复选框树形结构 |
2.3 售价限定详解
| 设置项 |
值 |
说明 |
price_limited |
0 |
不开启售价限定 |
price_limited |
1 |
开启售价限定 |
discount_limited |
1 |
不低于售价比例(需设置百分比) |
discount_limited |
2 |
不得低于批发价 |
discount_limited_value |
0-100 |
售价比例值(如80表示不低于售价的80%) |
示例: 设置 discount_limited=1, discount_limited_value=80 表示该角色用户开单时商品售价不能低于原售价的80%
2.4 权限树结构
权限列表为 5级树形结构:
权限分类(type)
└── 父权限(pid=0)
├── 子权限1(pid=父ID)
│ ├── 孙权限1
│ │ ├── 曾孙权限1
│ │ │ └── 玄孙权限1
│ │ └── 曾孙权限2
│ └── 孙权限2
└── 子权限2
权限数据表: ls_jurisdiction_list
三、门店用户管理 - StoreJurUsersController
文件: Application/Retail/Controller/StoreJurUsersController.class.php
3.1 功能方法列表
| 方法 |
用途 |
说明 |
index |
用户管理首页 |
展示门店所有用户列表 |
getUser |
获取用户详情 |
根据ID获取单个用户信息 |
userAdd |
添加用户页面 |
填写用户信息、选择角色 |
getStoreRoleList |
获取角色列表 |
获取当前门店的角色下拉列表 |
userAddAjax |
提交用户 |
新增/编辑用户 |
changeStatus |
启用/禁用用户 |
切换用户账号状态 |
usersDel |
删除用户 |
删除用户账号 |
3.2 用户设置项
| 设置项 |
说明 |
规则/限制 |
| 登录账号 |
用户登录手机号 |
必填,11位手机号格式 |
| 登录密码 |
用户登录密码 |
必填(新增时),6-16位字符 |
| 用户姓名 |
用户显示名称 |
必填 |
| 所属角色 |
用户所属角色 |
必填,从角色列表选择 |
| 是否启用 |
用户账号状态 |
开启/关闭 |
3.3 用户验证规则
| 验证项 |
规则 |
| 登录账号格式 |
必须为手机号(1[3456789]开头,11位) |
| 登录账号唯一性 |
同一store下手机号不能重复 |
| 密码长度 |
6-16位字符 |
| 用户数量限制 |
受门店 limit_user 字段控制 |
3.4 用户数量限制
门店可创建的用户数量受 retail_store.limit_user 字段限制:
// 获取门店用户数量限制
$storeInfo['limit_user']
// 获取已创建用户数
$yetNumber = D('retail_cashier')->where(['storeid'=>$storeId,'status'=>1])->count();
// 判断是否已达上限
if(bccomp((string)$yetNumber, (string)$storeInfo['limit_user']) >= 0) {
// 已达上限,禁止创建
}
四、商户角色管理 - MerchantRolesController
文件: Application/Retail/Controller/MerchantRolesController.class.php
4.1 功能方法列表
| 方法 |
用途 |
说明 |
index |
商户角色首页 |
展示商户所有角色 |
getRoles |
获取角色列表 |
AJAX分页获取 |
rolesAdd |
添加角色页面 |
选择权限 |
getAllJurList |
获取权限树 |
获取商户级权限列表 |
rolesAddAjax |
提交角色 |
新增/编辑商户角色 |
changeStatus |
启用/禁用角色 |
切换角色状态 |
rolesDel |
删除角色 |
删除商户角色 |
五、商户用户管理 - MerchantJurUsersController
文件: Application/Retail/Controller/MerchantJurUsersController.class.php
5.1 功能方法列表
| 方法 |
用途 |
说明 |
index |
商户用户首页 |
展示商户所有用户 |
getUser |
获取用户详情 |
获取单个用户信息 |
userAdd |
添加用户页面 |
填写用户信息 |
getStoreRoleList |
获取角色列表 |
获取商户角色下拉列表 |
userAddAjax |
提交用户 |
新增/编辑商户用户 |
changeStatus |
启用/禁用用户 |
切换用户状态 |
usersDel |
删除用户 |
删除商户用户 |
六、权限分配 - JurisdictionController
文件: Application/Retail/Controller/JurisdictionController.class.php
6.1 功能方法列表
| 方法 |
用途 |
说明 |
index |
权限分配首页 |
展示权限树形结构 |
setJurisdiction |
保存权限 |
修改用户或角色的具体权限 |
6.2 权限设置操作
| 参数 |
说明 |
id |
权限记录ID |
status |
状态值(0/1) |
key |
要修改的字段名 |
七、权限模型详解
7.1 JurisdictionGroupModel(角色表)
表名: ls_jurisdiction_group
| 字段 |
说明 |
id |
角色ID |
jurisdiction_id |
权限ID列表(逗号分隔) |
role_name |
角色名称 |
status |
状态(1启用/0禁用) |
create_user |
创建人类型 |
create_user_id |
创建人ID |
add_time |
添加时间 |
price_limited |
是否开启售价限定 |
discount_limited |
售价限定类型 |
discount_limited_value |
售价限定值 |
7.2 JurisdictionListModel(权限表)
表名: ls_jurisdiction_list
| 字段 |
说明 |
id |
权限ID |
name |
权限名称(中文) |
en_name |
英文名称 |
es_name |
西班牙语名称 |
fr_name |
法语名称 |
pt_name |
葡萄牙语名称 |
uzb_name |
乌兹别克语名称 |
pid |
父权限ID |
type |
权限类型 |
user_type |
适用用户类型 |
path |
权限路径 |
7.3 JurisdictionUserModel(用户权限关联表)
表名: ls_jurisdiction_user
| 字段 |
说明 |
id |
记录ID |
user_id |
用户ID |
jurisdiction_id |
权限ID |
user_type |
用户类型 |
八、操作流程
8.1 创建角色流程
1. 进入 角色管理 → 添加角色
2. 填写角色名称
3. 设置是否启用
4. 设置是否开启售价限定
├── 若开启:选择限定类型(售价比例/批发价)
└── 若选择售价比例:填写百分比数值
5. 从权限树中选择权限
6. 点击保存
8.2 创建用户流程
1. 进入 用户管理 → 添加用户
2. 填写登录账号(手机号)
3. 填写登录密码
4. 填写用户姓名
5. 选择所属角色
6. 设置是否启用
7. 点击保存
└── 系统检查:用户数量是否已达上限
8.3 权限分配流程
1. 进入 权限分配 页面
2. 选择要分配的用户或角色
3. 在权限树中勾选需要的权限
4. 点击保存
九、特殊权限控制
9.1 隐藏权限
以下权限ID对店长以下账号隐藏:
| 权限ID |
说明 |
| 705 |
未知(隐藏) |
| 709 |
未知(隐藏) |
| 1322 |
未知(隐藏) |
| 684 |
未知(隐藏) |
| 693 |
未知(隐藏) |
9.2 插件权限控制
| 插件ID |
权限ID |
说明 |
| 60 |
1351 |
发票管理(需开通插件) |
| 64 |
1372 |
合同管理(需开通插件) |
十、设置项汇总表
10.1 角色设置
| 分类 |
设置项 |
选项/值 |
| 基本 |
角色名称 |
文本输入 |
| 基本 |
是否启用 |
开启/关闭 |
| 售价限制 |
是否开启售价限定 |
开启/关闭 |
| 售价限制 |
限定类型 |
不低于售价比例 / 不得低于批发价 |
| 售价限制 |
售价比例 |
0-100% |
| 权限 |
权限列表 |
多级复选框树 |
10.2 用户设置
| 分类 |
设置项 |
规则 |
| 基本 |
登录账号 |
必填,11位手机号 |
| 基本 |
登录密码 |
必填,6-16位 |
| 基本 |
用户姓名 |
必填 |
| 基本 |
所属角色 |
必填 |
| 基本 |
是否启用 |
开启/关闭 |
10.3 操作设置
| 操作 |
说明 |
| 启用角色 |
开启角色可用性 |
| 禁用角色 |
关闭角色可用性 |
| 删除角色 |
需确认无用户关联 |
| 启用用户 |
开启用户账号 |
| 禁用用户 |
关闭用户账号 |
| 删除用户 |
删除用户账号 |