需要挂出链接引擎
这个 neeto-unlisted-links-engine 管理横跨 neto 的未上市公共链接
产品。 未列出的链接是一个秘密的,非索引的 URL,它只允许读取
访问特定资源(例如文章、项目、板子)而不制作
全球公众的资源。 链接可以选择自动过期.
目录
用主机应用程序开发
发动机
安装
- 将宝石添加到主机应用程序
Gemfile数字 :gem "neeto-unlisted-links-engine" - 安装它 :
bundle install - 将迁移文件复制到您的主机应用程序 :
bin/rails generate neeto_unlisted_links_engine:install - 运行迁移 :
bin/rails db:migrate
使用量
包含 Unlistable 记录可未列入清单的模型
链接。 模型应该 belong_to 组织(或任何响应的物体)
改为 root_url:
class Article < ApplicationRecord
include NeetoUnlistedLinksEngine::Unlistable
belongs_to :organization
end
关注线 a has_one :unlisted_link 协会。 您可以读取/复制
链接通过 NeetoUnlistedLinksEngine::LinksService数字 :
service = NeetoUnlistedLinksEngine::LinksService.new(article)
service.generate_link
service.regenerate_link(expiration_type: "thirty_days",
expiration_date: 30.days.from_now)
service.update(status: "inactive")
管理路线
主机应用程序负责曝光经认证的,
筑巢 show编号 :regenerate 无法列出的资源的路由——这是
这是什么 前端软件包是因为 resourceUrl 点在,
还有什么 LinksService sit坐后. 举例来说 Document窝
在一个项目下:
resources :projects, param: :sid do
# ...
resources :documents, module: :projects, param: :sid do
resource :unlisted_link, only: %i[show], module: :documents, param: :sid do
member do
post :regenerate
end
end
# ...
end
end
这与下列公共宣传路线不同:
上方是用于查看/重生链接的认证内应用 API
(并驱动 UnlistedLinks 模式),而公共路线是
有秘密URL的人的路由不正确 实际上访问.
公众获取
发动机载着一个抽象的 NeetoUnlistedLinksEngine::UnlistedLinksController
用于主机应用程序的子类, 而不是写公开的
控制器从零开始。 它处理未列出的资源(及其
附件)使用捆绑的视图和布局,只需要主机
执行单一方法的控制器 : #load_record。 。 。 .
# frozen_string_literal: true
class UnlistedLinksController < NeetoUnlistedLinksEngine::UnlistedLinksController
private
def load_record
return nil if @organization.nil?
unlisted_link = NeetoUnlistedLinksEngine::Link.resolve(params[:unlisted_link_identifier])
document = unlisted_link&.unlistable
return nil unless document.is_a?(Document)
return nil unless document.organization_id == @organization.id
@record = document
@content = NeetoEditorEngine.sanitize(@record.body).html_safe
@attachments = @record.attachments
end
end
# config/routes.rb
get "/public/:unlisted_link_identifier", to: "unlisted_links#show"
一些值得举出的例子:
#load_record将当前搜索范围@organization(设置于 随便啦before_action主机应用程序已经用于解决租户) 并提前返回@record如果没有组织,则未设置 如果解析的资源不是预期模式,链接就不会解决 (单位:千美元)Document或者它不属于那个组织 任何一项 这些案件涉及:#render_not_found。 。 。 .@content已经通过NeetoEditorEngine.sanitize标记html_safe之前交给观众,因为@record.body持有 丰富的,用户授权的HTML,不应被解密.- 路由参数的命名是为了匹配主机应用程序所称的
(单位:千美元)
:unlisted_link_identifier上面),只要确保#load_record读取 同一个参数名称.
如何运作
#show电话#load_record,然后使neeto_unlisted_links_engine/unlisted_project/show若为@record在场, 或打电话#render_not_found否则.#load_record必须由主机控制器定义,并预计会设置@record, (中文(简体) ),@content,以及@attachments. 基础执行提高NotImplementedError如果它不是压倒性的.#render_not_found重定向到Rails.application.vault.not_found_redirect_link默认。 如果您需要不同的控制器, 在主机控制器中覆盖它 未发现的行为.- 观点使得
@record.title,原始内容@content,如果@attachments目前存在,从cdn_attachment_url(attachment.blob)。 。 。 . - 风景在引擎内部
neeto_unlisted_links_engine/unlistable布局, 一个最小的独立 HTML 外壳( 属于<head>,样式,以及需要编辑的内容样式表) 因此公用页面不会继承主机应用程序的正常布局.
# app/controllers/neeto_unlisted_links_engine/unlisted_links_controller.rb (engine)
module NeetoUnlistedLinksEngine
class UnlistedLinksController < ApplicationController
before_action :load_record
layout "neeto_unlisted_links_engine/unlistable"
def show
if @record.nil?
render_not_found
else
render "neeto_unlisted_links_engine/unlisted_project/show"
end
end
private
def load_record
raise NotImplementedError,
"Host controller must define #load_record (the one which will " \
"include the @record and the @content and @attachments )"
end
def render_not_found
redirect_to Rails.application.vault.not_found_redirect_link
end
end
end
前端软件包
匹配的 npm 包是
@bigbinary/neeto-unlisted-links-frontend它输出一种模式,即:
资源 URL 前缀,显示未列出的链接、其过期状态和 a
复生出流.
import { UnlistedLinks } from "@bigbinary/neeto-unlisted-links-frontend";
<UnlistedLinks
isOpen={isOpen}
onClose={onClose}
resourceUrl="/v1/projects/:project_sid/documents/:document_sid/unlisted_link"
/>;
resourceUrl 应指 管理路径
(单位:千美元)GET 为显示, POST .../regenerate 用于特定
记录模式打开.
出版指令
- 弹出
lib/neeto_unlisted_links_engine/version.rb。 。 。 . - 更新
CHANGELOG.md。 。 。 . gem build neeto-unlisted-links-engine.gemspec。 。 。 .gem push neeto-unlisted-links-engine-<version>.gem --host https://private-gems.neeto.com。 。 。 .- 对于前端包, 凸起
package.json运行yarn build,以及npm publish。 。 。 .