需要进入控制纳诺
这个 neeto-access-control-nano 管理对neto产品的访问控制.
纳米出口 @bigbinary/neeto-access-control-frontend 国家防范机制一揽子计划
财务报告和审定财务报表 neeto-access-control-engine 铁路发展引擎.
目录
用主机应用程序开发
发动机
该引擎用于管理对neto产品的访问控制.
安装
-
添加宝石
Gemfilesource "NEETO_GEM_SERVER_URL" do # ..existing gems gem "neeto-access-control-engine" end -
安装宝石
bundle install -
在表格中添加所需的迁移
db/migrate文件夹。 运行以下 命令复制从引擎到主机应用程序的迁移。 实例: 需要论坛bundle exec rails neeto_access_control_engine:install:migrations bundle exec rails db:migrate -
将此行添加到您的应用程序
config/routes.rb文件 :mount NeetoAccessControlEngine::Engine => "/secure" -
添加
has_one连接到您想要添加访问控制的模式 配置 。 示例 - 组织只需要单次访问 控制系统.class Organization < ApplicationRecord has_one :access_control_configuration, as: :owner, class_name: "NeetoAccessControlEngine::Configuration", dependent: :destroy end -
您的控制器必须包含关注和访问 control 配置 方法.
class PublicController < ApplicationController . . include NeetoAccessControlEngine::Authenticate . private def access_control_configuration @_access_control_configuration ||= @organization.access_control_configuration end end -
添加以下文件的覆盖 :
-
7.1. 谷歌 控制器 override.rb
NeetoAccessControlEngine::GoogleController.class_eval do private def access_control_configuration @_access_control_configuration ||= @organization.access_control_configuration end end -
7.2. 邀请 控制器 override.rb(可选)
- 方法
access_control_configurationafter_invitations_created如果主机应用程序没有控制器的覆盖方法,那么
neeto_access_control_configuration_id参数必须包含在 请求段落.
NeetoAccessControlEngine::Api::V1::Configurations::InvitationsController.class_eval do private def access_control_configuration @_access_control_configuration ||= @organization.access_control_configuration end # after_action callback, called after invitations are created. # Use to send invitation emails or perform any post-invitation tasks. def after_invitations_created # @invited_emails is loaded in engine return if @invited_emails.blank? EmailInvitationsJob.perform_async(@invited_emails, current_user.id) end end - 方法
-
7.3. 嘉宾 会议 控制器 override.rb
NeetoAccessControlEngine::GuestSessionsController.class_eval do private def access_control_configuration @_access_control_configuration ||= @organization.access_control_configuration end end -
7.4. 配置 控制器 override.rb
NeetoAccessControlEngine::Api::V1::ConfigurationsController.class_eval do private def owner @organization end def update_owner! # Optional override to update the owner if required when configuration is updated end end
- 添加 Google OAuth 支持
-
8.1. 创建谷歌OAuth账户 观看演示视频 关于创建谷歌OAuth账户的分步指示。 添加 授权重定向 URI :
https://connect.neetokb.net/secure/google_oauth2/callback -
8.2. 设置嵌入变量 将以下秘密值添加到
config/secrets.yml。 。 。 .google: client_id: <%= ENV['GOOGLE_OAUTH_CLIENT_ID'] %> client_secret: <%= ENV['GOOGLE_OAUTH_CLIENT_SECRET'] %>
前端软件包
安装
- 安装最新的
neeto-access-control-frontend使用下列软件包 命令 :yarn add @bigbinary/neeto-access-control-frontend
构成部分
1. 联合国. Configuration (单位:千美元)源代码(中文(简体) )
道具
ownerId:指定模型实例的标识。 ID是用来 获取和更新访问控制配置 .ownerType:型号类型.onReset: 重设按钮时触发的回调函数 点击.onSuccess: 当配置时触发的召回函数 成功更新 .handleCancel: 当取消按钮时触发的回调函数 点击.invitationsTableExtraColumnsData: 支持添加邀请的列数据 页:1 如果密钥已经存在, 这将覆盖现有的列 . 参考 列数据onConfigurationChangedToInviteOnly: 当 配置改为invited默认 :noop。 。 。 .headerProps: 传递给Header从netoMolecules的组件.hideAddEmailsFromInvitationPane: 支持隐藏来自 请柬窗格。 默认 :false。 。 。 .className: 表格中将增加附加类.onDestroyInvitationsSuccess: 当 成功销毁邀请 .inviteButtonProps: 如果指定, 这将显示在顶部的按钮 皮内. 它可以用来让用户在 请柬Pane.additionalFieldsInitialValues: 支持添加自定义字段到 形式.fieldsWrapper: 将字段包裹在窗体中的组件。 用于 在窗体上添加自定义字段.translationContext: 翻译的上下文,可用于覆盖 字段标签的翻译。 参考: https://www.i18next.com/ translation-函数/contexttransProps: 推进器Trans用于窗体字段标签的组件. 每个字段标签都可以通过在transProps映射到认证类型的对象 :no, (中文(简体) ),basic, (中文(简体) ),email, (中文(简体) ),session, (中文(简体) ),invited。 。 。 .enableNavigationBlocking: 如果true,使BlockNavigation组件 在表格中未保存的更改时, 从 netoUI 显示提醒 .
2. 联合国. Invitations 对象
这个 Invitations 对象提供访问邀请相关组件,
钩而并常.
构成部分
InvitationsPane (单位:千美元)源代码(中文(简体) )
道具
检查默认值的源代码
onClose: 关闭按钮时触发的回调函数 点击.isOpen: profile for pane,将反映平板状态.extraColumnsData: 支持为邀请表添加列数据。 这个会 如果键已经存在, 则覆盖已存在的列 。 参考 列数据ownerId:指定模型实例的标识。 ID是用来 获取和更新访问控制配置 .ownerType:型号类型.hideAddEmailsForm: 支持从邀请面板上隐藏添加电子邮件表 .configurationId: 主张指定模型实例的ID. 身份证 用于装入访问控制配置. 注:如果该道具不是 通过,确保invitations_controller_override.rb添加为access_control_configuration在添加覆盖时采用上述方法 节.onDestroyInvitationsSuccess: 当 成功销毁邀请 .inviteButtonProps: 如果指定, 这将显示在顶部的按钮 皮内. 它可以用来让用户在 请柬Pane.
钩子
常数
INVITATIONS_QUERY_KEY: 用于响应邀请的查询缓存
邀请对象使用
/* Required imports */
import { Invitations } from "@bigbinary/neeto-access-control-frontend";
const { InvitationsPane, useBulkCreateInvitations, INVITATIONS_QUERY_KEY } =
Invitations;
const MyComponent = () => {
const [showInviationsPane, setShowInviationsPane] = useState(false);
const [emails, setEmails] = useState("");
const { mutateAsync: addEmails } = useBulkCreateInvitations({
configurationId: null,
});
const queryClient = useQueryClient();
const addTestEmails = async () => {
const payload = { emails: emails.split(",") };
await addEmails(payload);
setEmails("");
queryClient.invalidateQueries({
queryKey: [INVITATIONS_QUERY_KEY],
});
};
return (
<div className="space-4 p-5">
<Input
label="Email"
value={emails}
onChange={e => setEmails(e.target.value)}
/>
<Button label="Add test email " onClick={addTestEmails} />
<Button
label="Open Invitation pane"
onClick={() => setShowInviationsPane(true)}
/>
<InvitationsPane
hideAddEmailsForm
isOpen={showInviationsPane}
onClose={() => setShowInviationsPane(false)}
/>
</div>
);
};
使用量
这是在 neetoKB 中使用的例子
import React from "react";
import { Configuration } from "@bigbinary/neeto-access-control-frontend";
import { HELP_SECURITY_DOC_URL } from "src/constants/urls";
import { buildDefaultBreadcrumbs } from "./utils";
const AccessControl = () => {
return (
<Configuration
className="mx-auto max-w-3xl md:px-0 lg:px-6"
handleCancel={() => {}}
headerProps={{
title: "Access control",
description: "Access control description",
helpLink: HELP_SECURITY_DOC_URL,
breadcrumbs: buildDefaultBreadcrumbs({
title: "Access control",
}),
}}
/>
);
};
export default AccessControl;
钩子
1. 联合国. useShowConfiguration
这是用于获取访问控制配置的 React 查询钩 指定所有者.
参数
ownerId:指定模型实例的标识。 此ID将被用于 获取访问控制配置 .ownerType:型号类型.
使用量
const {
data: { configuration },
} = useShowConfiguration({ ownerId, ownerType });
自定义主机应用程序中带有翻译的选项标签
要自定义用于认证的选项标签, 您可以设置从 主机应用程序。 要设定主机应用程序的翻译 :
- 打开
en.json文档. - 添加该选项下认证选项标签的翻译
neetoAccessControl.auth名称空间。 示例:{ "neetoAccessControl": { "auth": { "no": "No auth label", "basic": "Basic auth label", "email": "Email auth label" "session": "Session auth label" } } }
解决问题
密码认证在开发期间不工作于嵌入式页面
当密码保护的页面嵌入到iframe中时,认证可能 开发失败 —— 密码页即使在输入后仍然显示 正确的密码。 这是因为Iframe的会话饼干被当成 第三方饼干 浏览器在HTTP上屏蔽第三方饼干.
修补 : 将测试 HTML 文件放入主机应用程序 public/ 目录
,并在与dev服务器(例如,,
http://spinkart.lvh.me:9026/test-embed.html) (中文(简体) ). 这使得Iframe的会话
饼干第一派对,避免第三方饼干限制.
这不是生产问题,因为HTTPS允许 SameSite=None; Secure
饼干在iframes工作.
出版指令
咨询 构建和释放软件包 关于如何出版的详细指南.
释放β版本
- 将更改推向目标分支以释放β版本.
- 更新软件包版本至
{latest-version}-beta(如果有的话)1.2.34这是 最新版本,将1.2.34-beta在目标分支中为 β释放. - 起草新版本 从与目标分支的回波.
- 在格式中添加一个新的标签和标题: 前缀的版本
v,例如:v1.2.34-beta。 。 。 . - 生成放行笔记.
- 将发行设定为发行前期,并公布发行.
如果我们要发布一个β版本的产品, 我们必须通知 遵守团队也避免用最新版本覆盖版本 在下一次遵守发布.