ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Dolibarr Web Portal 模块实战指南:为客户、供应商与会员构建独立的自助门户

Dolibarr Web Portal 模块实战指南:为客户、供应商与会员构建独立的自助门户 企业应用后端【免费下载链接】dolibarrDolibarr ERP CRM is a modern software package to manage your company or foundations activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). its an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.项目地址https://gitcode.com/gh_mirrors/do/dolibarr点击查看免费下载Web Portal网络门户是 Dolibarr ERP/CRM 内置的一个模块用于为你的客户、供应商、合作伙伴或会员提供一个开箱即用的自助门户这些外部人员无需进入后台backoffice就能在独立域名上查看甚至修改与自己相关的业务数据。读完本文你将掌握 Web Portal 模块的启用与配置流程、门户账号Website account的创建方法、按业务模块开放数据权限的完整配置项以及它基于控制器Controller驱动的内部运行原理能够直接在自己的 Dolibarr 实例上落地一套客户自助门户。模块定位它解决什么问题按照 htdocs/webportal/README.md 的说明Web Portal 是一个开箱即用ready to use的门户模块服务对象是客户customers供应商suppliers合作伙伴partners会员模块Membership下的会员members它的核心价值是解耦前台与后台门户的访问账号登录名和密码可以为任意第三方thirdparty创建入口位于第三方卡片上的Web site accounts网站账号标签页。README 特别强调最好为门户配置一个独立的 Web 服务器、独立的虚拟主机virtual host和独立域名这样外部用户访问门户时不会暴露你后台backoffice安装的域名和 URL从部署层面把门户与内部管理系统隔离。在模块描述文件 htdocs/core/modules/modWebPortal.class.php 中可以看到它的注册信息模块编号numero 11000权限类名rights_class webportal所属功能族family portal语言文件使用website并在启用时创建数据目录/webportal/temp。模块提供的唯一权限是Administer users of the customer/partner webportal module管理客户/合作伙伴门户模块的用户权限类型为write。启用模块与门户入口启用模块Web Portal 是一个标准内置模块启用方式与 Dolibarr 其他模块一致以管理员身份登录后台进入Home → Setup → Modules模块列表找到Web Portal模块并启用启用后模块在数据库中写入MAIN_MODULE_WEBPORTAL常量标记并在conf中挂载$conf-webportal配置对象见 modWebPortal.class.php 构造器。门户入口地址门户的公开入口固定为后台目录下的public/webportal/index.php。在 htdocs/webportal/admin/setup.php 中可以看到该入口 URL 的生成逻辑它使用$urlwithroot./public/webportal/index.php拼接并追加?entityxxx参数当启用多公司 multicompany 时实际地址形如https://your-domain/htdocs/public/webportal/index.php而入口文件 htdocs/public/webportal/index.php 本身非常简洁它先引入webportal.main.inc.php完成 Dolibarr 环境与Context的初始化然后调用$context-controllerInstance-action()处理动作再调用$context-controllerInstance-display()渲染页面——所有逻辑都委托给当前选中的控制器Controller。门户账号Website Account体系账号来源README 明确指出门户访问账号可以为任意第三方创建。在 Dolibarr 中这类账号的数据模型是societe_account表由 htdocs/societe/class/societeaccount.class.php 封装其对象类名为WebsiteAccount见 htdocs/societe/website.php 中$objectclass WebsiteAccount。管理入口位于第三方的Web site accounts标签页htdocs/societe/website.php页面标题为 Website Accounts支持批量列表、排序、搜索与新建新建按钮会跳转到website/websiteaccount_card.php?actioncreatefk_soc第三方ID创建账号。账号如何被门户认证登录认证的底层实现在 htdocs/webportal/class/context.class.phpgetThirdPartyAccountFromLogin($login, $pass)从societe_account表中按登录名查询且限定site dolibarr_portal说明门户账号在网站账号体系中用dolibarr_portal这个站点标识与普通网站账号区分、status 1启用状态再通过dol_verifyHash($pass, $pass_crypted, 0)校验密码哈希getMemberAccountFromLogin($login, $pass)从adherent会员表中按登录名查询启用状态会员并校验密码哈希登录状态通过 Session 保存$_SESSION[webportal_logged_thirdparty_account_id]第三方账号或$_SESSION[webportal_logged_member_account_id]会员账号userIsLog()据此判断用户是否已登录见 context.class.php。值得注意的是认证代码中包含防暴力破解逻辑当密码错误时代码会sleep(1)延时 1 秒与登录名无效时的延迟保持一致避免攻击者通过响应时间差异枚举有效账号。同时错误码体系为-1数据库查询失败、-2找到多个账号数据异常、-3密码错误。会员账号的特殊性README 特别说明会员Membership登录走的是会员账号体系adherent表而不是societe_account。也就是说第三方客户/供应商/合作伙伴→ 使用Web site accounts标签页创建的societe_account账号会员 → 使用会员自身的登录账号adherent.login/adherent.pass_crypted。门户对外暴露的数据能力按模块划分README 给出了门户可读/可修改数据的完整清单。关键在于每一项能力都依赖于对应业务模块是否已启用。整理如下已启用的业务模块门户可访问的数据读写能力Thirdparty第三方第三方的名称、电话、邮箱、地址读 修改Partnership合作伙伴关系合作伙伴关系的属性状态、开始日期、结束日期读Proposal报价单自己的报价单读Sale Order销售订单自己的订单读Invoice发票自己的发票读Supplier供应商模块价格请求、订单、发票读Membership会员第三方的名称、电话、邮箱、地址会员状态开始/结束日期、已付金额读 修改需要留意 README 的一个细节在 Proposal报价单 条目下原文写的是 Read its orders但从上下文Proposal 模块以及源码中WEBPORTAL_PROPAL_LIST_ACCESS常量来看其实际语义是读取报价单列表——README 此处存在笔误读者应以报价单理解该行。源码级的对应关系上述每种数据能力在 htdocs/webportal/class/ 目录下都有对应的门户业务对象类webportalpropal.class.php—— 报价单webportalorder.class.php—— 订单webportalinvoice.class.php—— 发票webportalpartnership.class.php—— 合作伙伴关系webportalmember.class.php—— 会员webportalficheinter.class.php—— interventions工单/服务干预webportalticket.class.php—— 工单/服务单webportalfieldsmanager.class.php—— 门户字段管理器控制哪些字段在门户中可见/可编辑同时htdocs/webportal/controllers/ 目录下的控制器与之一一对应propallist、orderlist、invoicelist、ficheinterlist、ticketlist各类列表、membercard、partnershipcard卡片详情、documentlist/shareddocuments共享文档/GED 文档、viewimage图片查看等。这些控制器的注册位于 context.class.php 的initController()方法中控制器名通过 URL 参数controller仅允许aZ09字符做了输入白名单过滤传入默认控制器为default。门户后台配置详解门户的配置页面集中在htdocs/webportal/admin/下共三个页面路径作用设置Settingshtdocs/webportal/admin/setup.php核心参数配置皮肤与颜色SkinAndColorshtdocs/webportal/admin/setup_theme.php主题外观CSS 页面htdocs/webportal/admin/configcss.php自定义 CSS这些标签页的组装逻辑见 htdocs/webportal/lib/webportal.lib.php 的webportalAdminPrepareHead()。配置页仅管理员可访问if (!$user-admin) accessforbidden();。核心配置参数从 setup.php 的源码可以看到门户的核心配置项以 Dolibarr 常量形式存储常量名类型/控件说明WEBPORTAL_USER_LOGGED用户选择器指定用于门户的 Dolibarr 内部用户下拉选择启用用户用于门户会话绑定WEBPORTAL_ROOT_URL文本框门户根 URL占位符提示https://。Context::getRootConfigUrl()会优先读取它未配置时回退到/public/webportal/的公开路径见 context.class.phpWEBPORTAL_TITLE文本框门户标题默认值取MAIN_INFO_SOCIETE_NOM公司名称WEBPORTAL_PROPAL_LIST_ACCESS是/否是否开放报价单列表仅当 propal 模块启用时出现WEBPORTAL_ORDER_LIST_ACCESS是/否是否开放订单列表仅当 order 模块启用时出现WEBPORTAL_INVOICE_LIST_ACCESS是/否是否开放发票列表仅当 invoice 模块启用时出现WEBPORTAL_FICHEINTER_LIST_ACCESS是/否是否开放 interventions 列表仅当 intervention 模块启用时出现WEBPORTAL_TICKET_LIST_ACCESS是/否是否开放工单列表仅当 ticket 模块启用时出现WEBPORTAL_PARTNERSHIP_CARD_ACCESS下拉选择合作伙伴关系卡片访问级别hidden隐藏/visible可见仅当 partnership 模块启用时出现WEBPORTAL_MEMBER_CARD_ACCESS下拉选择会员卡片访问级别hidden隐藏/visible可见/edit可编辑仅当 member 模块启用时出现由此可以总结出门户权限模型的两条核心规律模块前置配置项是否出现取决于对应业务模块是否启用isModEnabled(propal)、isModEnabled(order)等。README 中如果 X 模块已启用的条件与此完全一致细粒度开关列表类功能用简单的是/否开关控制而涉及敏感信息会员、合作伙伴关系的卡片类功能提供hidden / visible / edit三级访问级别其中可编辑级别直接对应 README 中Read/modify的修改能力。关于 URL 与部署的补充配置除了上述可见配置项源码中还引用了一个隐藏配置WEBPORTAL_CDN_URL用于为/public/includes/的静态资源设置 CDN 地址避免门户页面直接暴露后台资源 URL见 context.class.php 构造器中的getDolGlobalString(WEBPORTAL_CDN_URL, dol_buildpath(/public/includes/, 3))。这与 README 强调的隐藏后台域名理念一脉相承属于对公开 URL 的进一步保护手段。门户运行机制控制器驱动架构从代码结构可以推断Web Portal 采用了一套轻量级 MVCModel-View-Controller架构这是它与 Dolibarr 传统页面直接混排 HTML 的 PHP 脚本最明显的差异public/webportal/index.php │ ▼ Context::getInstance()单例 │ ├── 根据 ?controllerxxx 参数加载控制器白名单 aZ09 ├── $controllerInstance-action() // 业务动作发生在 HTML 输出前 └── $controllerInstance-display() // 渲染视图关键组成部分入口htdocs/public/webportal/index.php——全部逻辑委托给控制器上下文Contexthtdocs/webportal/class/context.class.php——单例持有数据库连接、当前控制器、登录用户/第三方/会员、主题、根 URL、token、错误与事件消息栈等全局状态。控制器定义通过addControllerDefinition()注册controller参数经GETPOST(controller, aZ09)白名单过滤控制器基类htdocs/webportal/class/controller.class.php——定义了checkAccess()、action()、display()的标准生命周期具体控制器htdocs/webportal/controllers/——如LoginController未登录时显示登录页、DefaultController门户首页、PropalListController、OrderListController、InvoiceListController、MemberCardController、PartnershipCardController等视图模板/public/webportal/tpl/目录Context通过realpath(__DIR__ . /../../public/webportal/tpl)定位由loadTemplate()加载如header_login、login、footer等模板主题系统htdocs/webportal/class/webPortalTheme.class.php——门户拥有独立的主题渲染层WebPortalTheme配合setup_theme.php与configcss.php提供皮肤和自定义 CSS 能力。登录流程以 login.controller.class.php 为例可以还原完整登录链路未登录用户访问门户 →Context根据请求参数选中控制器LoginController::checkAccess()调用Context::userIsLog()若 Session 中已存在webportal_logged_thirdparty_account_id或webportal_logged_member_account_id返回true已登录跳转离开登录页否则放行显示登录页action()设置页面标题WebPortalHomeTitle/ 描述WebPortalHomeDescdisplay()加载header_login、login、footer模板渲染登录表单提交登录表单后Context::getThirdPartyAccountFromLogin()/getMemberAccountFromLogin()完成认证并写入 Session。整个过程体现了安全设计的几个要点控制器参数白名单、密码哈希校验dol_verifyHash、登录失败延时防爆破、Session 隔离的登录状态。部署建议与最佳实践结合 README 与源码落地 Web Portal 时建议遵循以下实践独立域名 独立虚拟主机README 明确建议为门户配置独立 Web 服务器、虚拟主机和域名避免门户 URL 泄露后台地址。生产环境中应在 Web 服务器层配置 HTTPS配置WEBPORTAL_ROOT_URL在门户设置页填写门户对外根 URL若使用 CDN可额外配置隐藏常量WEBPORTAL_CDN_URL隐藏静态资源真实地址按需开放数据只启用你确实需要暴露的业务模块访问开关报价单/订单/发票/工单等会员与合作伙伴卡片按hidden / visible / edit三档控制做到最小权限开放账号管理第三方账号统一在第三方卡片的Web site accounts标签页创建societe_account表站点标识dolibarr_portal会员则使用会员自身的登录账号体系二者认证路径不同需分别管理了解版本前提模块要求 PHP 7.0 及以上见 modWebPortal.class.php 的phpmin并依赖相应业务模块Thirdparty、Proposal、Order、Invoice、Supplier、Partnership、Membership 等启用后才开放对应数据能力。进一步阅读模块官方文档入口见 htdocs/webportal/README.md文档尾部指向 Dolibarr Wiki 的 Module Web Portal 页面模块描述与启用细节htdocs/core/modules/modWebPortal.class.php门户配置页面htdocs/webportal/admin/setup.php门户运行核心Context/认证/控制器注册htdocs/webportal/class/context.class.php门户业务对象类htdocs/webportal/class/门户控制器htdocs/webportal/controllers/门户公开入口htdocs/public/webportal/index.php网站账号管理页面htdocs/societe/website.php。赞分享企业应用后端【免费下载链接】dolibarrDolibarr ERP CRM is a modern software package to manage your company or foundations activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). its an open source Web application (written in PHP) designed for businesses of any sizes, foundations and freelancers.项目地址https://gitcode.com/gh_mirrors/do/dolibarr点击查看免费下载相关推荐为什么Lossless Claw的压缩从不失败深度拆解阈值触发与摘要三级降级回退机制为什么Lossless Claw的压缩从不失败深度拆解阈值触发与摘要三级降级回退机制 Lossless ClawLCMLossless Context MUnkey Portal 前端架构指南面向客户的门户应用分层设计与会话管理Unkey Portal 前端架构指南面向客户的门户应用分层设计与会话管理 Portal 是 Unkey 面向最终客户的官方门户应用——Unkey 客户的终端后端API网关认证鉴权Midscene免费教程自然语言完成浏览器、Android与iOS自动化2步启动Midscene免费教程自然语言完成浏览器、Android与iOS自动化2步启动 Midscene 是一个开源的 AI 浏览器自动化工具你用自然语言描述任人工智能AI Agent测试GUI 自动化浏览器控制测试智能体上一篇终极解决方案VisualCppRedist AIO一键搞定所有VC运行库安装难题 下一篇一人企业方法论4步种下第一块副业田地的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表