使用依赖注入校长授权成分并不需要访问该业务数据库,委托了一个“是本公司经营授权”查询的只是注入能力。所以在psuedocode;
class Authorization()
{
public enumCheckAccessResult IsAuthorized(IIdentity userIdentity, ISecurable itemToCheckForAccess IAuthorizationExtension extension)
{
enumCheckAccessResult result = checkMyLocalAuthorisationStore(userIdentity, itemToCheckForAccess);
if(result == enumAccessCheckResult.SecurableNotFound)
{
result = extension.CheckExternalAuthorisationStore(userIdentity, itemToCheckForAccess)
}
}
}
以我的伪代码的授权类接受一个IAuthorizationExtension实例,其可通过授权类的任何消费者提供的扩展点(dependeny注射)。请注意,如果我们的本地商店无法找到可安全(即要安全检查的项目),那么我们只使用此扩展,所以IAuthorisationExtension的作者不能覆盖我的授权类的决定 - 如果我的授权类说“拒绝访问”,我们不会然后咨询扩展。
取决于它是否是业务规则,您可能确实将其放入您的业务逻辑中。 –