angular2依赖注入容器是否为独立使用而设计,是否可以将它用于typescript/javascript服务器端应用程序?
我在10月16日(https://github.com/angular/di.js/issues/108)在di项目上打开了一个问题,我想这应该是进入v2.显然这是不可能的.新的angular2 di有什么用?我可以使用js/es6/ts项目以独立方式使用它吗?
在节点命令行界面中运行时:
> Math.tan(Math.PI/2)
16331778728383844
Run Code Online (Sandbox Code Playgroud)
但在Chrome中:
> Math.tan(Math.PI/2)
Infinity
Run Code Online (Sandbox Code Playgroud)
是不是都使用相同的V8引擎?
节点的结果甚至不等于JavaScript中的最大"整数"值.
在我用javascript(Node.js)编写的DDD应用程序中,我对授权通用子域的实现感到磕磕绊绊.我查看了如何实现这一点的RBAC/ACL授权模型,但它们似乎没有我需要的每实例权限.
据我所知,RBAC具有基于角色的授权.用户被分配到角色.角色是分层的并且继承权限.角色可以拥有多个权限.权限允许在资源上执行命令.
但是,正如RBAC所定义的那样,资源是通用的,如"帖子","评论","书籍"等.它们不是特定于实例的(如Post(id:9283984)).例如,在RBAC中无法定义只有创建Post的用户才能编辑它.似乎无法将角色"Admin"分配给给定"Post(id:2398493)"上的"User(id:(8290321)"
定义具有执行修改其他人在特定资源上的角色的命令的权限的角色变得更加复杂.
我的申请要求是:
该User
谁发布的CreateLedger
命令被自动分配为Admin
这Ledger
.他只能分配给其他人作为Managers
或Collaborators
或Viewers
横木的他Admin
的.他也可以撤销这些角色.Managers
被允许来管理Accounts
的Ledger
.Collaborators
允许Transactions
对此进行编辑Ledger
,并且Viewers
只能查看数据(只读).一个Admin
可以分配Admin
角色的书,他Admin
的另一个User
.
我最初的想法是,为了使用户能够管理资源上的用户角色,需要在
user(id:X) -> role(name:Z) -> permissions -> resource(id:Y) -> commands
但在RBAC中,它只能分配
user(id:X) -> role(name:Z) -> permissions -> resource(name:"Ledger") -> commands
然后,为了克服RBAC的这种限制,我想到了用它们的id命名资源
user(id:X) -> role(name:Z) -> permissions -> resource(name:"Ledger:39823847") -> commands
但这似乎是错误的.我没有看到使用资源名称作为实际实例的映射的RBAC的任何示例.
我用错了锤子?我看错了吗?是否有其他一些更适合此任务的访问控制模型?或者这是要走的路?如果有人能指出我正确的方向,我将不胜感激.
谢谢您的帮助
我正在实现一个 commandBus,我想用命令处理程序注册命令类型,以将传入的命令映射到正确的命令处理程序。我传递了一个命令构造函数来映射到像这样的处理程序构造函数register(handler : typeof Handler, command : typeof Command)
。但我不断收到编译错误。
我终于查清了原因。在打字稿中,您不能定义参数arg typeof X
并传入构造函数Y
, event if ' Y extends X
。构造函数必须具有相同的签名。
检查那个片段。在底部,甚至commandBus.register(Object)
不会抛出编译错误。
class BaseClass{}
class DerivedClass extends BaseClass{
constructor(b : number) {
super();
}
}
class AnotherClass extends BaseClass{
constructor(){
super();
}
}
class CommandBus {
register(handler : typeof BaseClass) {}
}
var commandBus = new CommandBus();
commandBus.register(DerivedClass); // Argument of type 'typeof DerivedClass' is not assignable to parameter of type 'typeof …
Run Code Online (Sandbox Code Playgroud) 我正在为我的应用程序建模通用授权子域.这些要求非常复杂,因为它需要处理多租户,分层组织结构,资源组,用户组,权限,用户可编辑权限等.它是RBAC(分配给角色的用户,具有权限的角色,权限可以执行命令)与基于声明的身份验证的混合体.
在检查业务规则不变量时,我必须遍历权限"图"以找到用户对环境中的资源执行命令的权限.遍历深度在多个维度上是任意的.
我可以使用代码对此进行建模,但最好使用图形数据库来表示,因为此聚合上的查询/更新会更快.此外,它会降低代码本身的复杂性.但这需要图形数据库立即保持一致.
不过,我需要使用CQRS/ES,并启用分布式架构.
所以图数据库需要
这带来了一些缺点
但它有优势
在我建模的其他聚合中,我经常有一个EntityList
实例或EntityHierarchy
实例.它们基本上是子实体的有序/分层集合.他们的实施是任意的.它们可以支持索引,键值对,动态数组等任何内容.只要它们实现我为它们声明的接口.我经常甚至在这些实体(列表)上有findById()
或类似的方法findByName()
.这些方法类似于可以在数据库上执行的方法,但它们是在内存中执行的.
那么,为什么不能实现这样一个可以绑定到数据库的列表呢?例如,TMemoryEntityList
我会有一个,而不是一个TMySQLEntityList
.在目前的情况下,可能需要实现一个TGraphAuthorizationScheme
可以存在于TOrgAuthPolicy
聚合内部的实现.只要它的行为类似于集合,并且它可以迭代并支持定义的接口.
我正在使用Node.js上的JavaScript构建我的应用程序.这个名为LevelGraph的内存实现.也许我也可以使用它.但是让我们继续吧.
我知道在DDD术语中,基础设施不应泄漏到域中.这就是我想要阻止的.这也是我提出这个问题的原因之一,就是这是我第一次遇到这样的技术需求,我要求那些习惯于应对这类问题的人提出一些建议.
集合的接口是IAuthorizationScheme
.实现必须支持深度遍历,授权查找等.这是我正在考虑通过支持图形数据库来实现的接口.
序列 :
1当用户要求执行命令时,我首先验证他.我找到他的组织,并要求OrgAuthPolicyRepository
加载他的组织的相应OrgAuthPolicy
.
该OrgAuthPolicyRepository
载荷从事件EventStore
.
将OrgAuthPolicyRepository
创建一个新的OrgAuthPolicy
,具有依赖注入TGraphAuthorizationScheme
实例.
该OrgAuthPolicyRepository
应用所有以前的事件的OrgAuthPolicy
,这进而调用图形数据库查询同步的状态GraphDatabase
与集料.
命令处理程序执行业务规则验证检查.其中一些可能包括对聚合的检查IAuthorizationScheme
.
已验证业务规则,并分派域事件.
聚合处理此事件,并将其应用于自身.这可能包括改变IAuthorizationScheme
.
eventBus将事件调度到读取端的所有侦听eventHandler.
示例:
可以想象/希望使用外部数据库(例如图形数据库)实现实体,以便它们的实现更容易吗?如果是,是否有此类实施或指南的示例?如果没有,使用这种技术有什么缺点?
我正在尝试使用JsDoc来记录es6类.无法相信您不能将类作为参数传递(类类型,而不是实例类型).
我一直在尝试但不能让这个简单的代码工作,以便JsDoc不会给我一些警告.
我不能让它工作,除非我为每个类创建一个@typedef,然后手动添加所有自己和继承的成员.甚至不能做混合!
有没有人成功传递构造函数/类参数?那么JsDoc是在静态上下文中,而不是实例上下文?
/**
* @class A
*/
class A {
/**
* @static
*/
static helloFromClassA(){
}
}
/**
* @class B
* @extends A
*/
class B extends A{
/**
* @static
*/
static helloFromClassB(){
}
}
/**
* Class as object
* @param {A} ClassArgument
*/
function fn1(ClassArgument){
ClassArgument.helloFromClassA(); // Unresolved function or method helloFromClassA
// Does not work because ClassArgument is interpreted as an
// instance of A, not A's constructor
}
/**
* // …
Run Code Online (Sandbox Code Playgroud) 来自istio 文档的多信任部署模型
\n\n我想将多个网格连接在一起。我目前管理 3 个不同的 AKS 集群
\n我在操作上运行 Hashicorp Vault,我\xe2\x80\x99d 希望能够到达例如。Postgres that\xe2\x80\x99s 使用 istio mTLS 在暂存和生产中运行(用于自动秘密轮换)。
\n每个集群都在不同的网络中运行 istio(多主)。每个集群都有不同的 ClusterName、MeshID、TrustDomain 和 NetworkID。不过,cacerts
秘密是使用通用根 CA配置的
从istio 文档来看,为了实现跨集群通信,eastwestgateway
必须部署一个特殊的。tlsMode 是AUTO_PASSTHROUGH
。
这些是 eastwestgateway 的环境变量
\n# sni-dnat adds the clusters required for AUTO_PASSTHROUGH mode\n- name: ISTIO_META_ROUTER_MODE\n value: "sni-dnat"\n# traffic through this gateway should be routed inside the network\n- …
Run Code Online (Sandbox Code Playgroud) 我使用Spring4d框架 进行依赖注入和其他事情.
在应用程序入口点,我必须创建应用程序"Main"表单.虽然,我不知道其他任何方式
Application.CreateForm(TMainForm, MainForm)
Run Code Online (Sandbox Code Playgroud)
创造这个.
是否可以使用Spring4d依赖注入创建Main表单?像这样:
MainForm := GlobalContainer.Resolve<IMainForm>;
Run Code Online (Sandbox Code Playgroud)
然后将其设置为打开应用程序时显示的表单?
我正在创建一个 MEAN 堆栈,我想澄清以下内容。
从编码标准的角度来看,我知道验证应该在客户端和服务器端执行。我想要实现的是执行完全相同的验证代码,这样我就不会再次重复该代码。这更像是客户端和服务器端的共享代码。
那么如何让 Angular js 和 Express js 调用相同的 .js 文件来执行验证呢?有可能吗?
谢谢!
我正在根据Spring4d的文档示例制作一个eventPublisher
不同之处在于订阅者必须明确订阅事件.
我想触发他们的Handle程序基于是否实现IEventHandler<TEventType>
接口.
发布传入事件时,我IEventHandler<TEventType>
使用事件的类名和Spring4d 找到类型引用TType.FindType('IEventHandler<TEvent1>')
然后我遍历我的订阅者(实现IEventHandler接口的对象)并检查它是否支持IEventHandler类型.
问题是即使订户没有实现接口,Supports方法也会返回true.
此外,我尝试列出说TMyEventHandler2
类型的接口.它包含IEventHandler<TEvent2>
??
我相信这是由于IEventHandler<TEvent2>
与IEventHandler<TEvent1>
共享相同的GUID 的限制
这有解决方法吗?
使用这些类和接口:
TEvent1 = class(TObject)
end;
TEvent2 = class(TObject)
end;
IEventHandler = interface(IInvokable)
[guid]
procedure Handle(aEvent : TObject);
end;
IEventHandler<T : class> = interface(IEventHandler)
[guid]
procedure Handle(aEvent : T);
end;
TMyEventHandler1 = class(TObject, IEventHandler, IEventHandler<TEvent1>)
public
procedure Handle(AEvent : TObject); overload;
procedure Handle(AEvent : TEvent1); overload;
end;
TMyEventHandler2 = class(TObject, IEventHandler, IEventHandler<TEvent2>)
public
procedure Handle(AEvent : TObject); …
Run Code Online (Sandbox Code Playgroud) javascript ×3
delphi ×2
node.js ×2
spring4d ×2
typescript ×2
angular ×1
angularjs ×1
cqrs ×1
ecmascript-6 ×1
express ×1
infinity ×1
inheritance ×1
interface ×1
istio ×1
jsdoc ×1
kubernetes ×1
math ×1
mean-stack ×1
rbac ×1
reflection ×1
rtti ×1
static ×1
v8 ×1
webstorm ×1