大型PHP项目:将文件访问限制为只访问开发人员需要的文件的最佳实践

大型PHP项目:将文件访问限制为只访问开发人员需要的文件的最佳实践,php,dependency-management,corporate,Php,Dependency Management,Corporate,我们在自己的MVC框架上构建了一个大型定制PHP项目。该框架结构良好,文件组织良好,并分解为特定的页面/方法/类 我和我的主要编码员一直在编写代码,我们有完全的访问权限。我可以信任我的主要程序员,但现在我需要雇佣额外的帮助。我发现了一些优秀的程序员,但我担心允许他们FTP访问我们的系统开始工作,我不敢允许他们访问所有文件 我的主要问题是:如何允许开发人员只访问他需要更改的特定文件? 我考虑过用ionCube或类似的东西对整个项目进行加密,然后只对特定文件进行解密,但这是一个麻烦的解决方案。另一个

我们在自己的MVC框架上构建了一个大型定制PHP项目。该框架结构良好,文件组织良好,并分解为特定的页面/方法/类

我和我的主要编码员一直在编写代码,我们有完全的访问权限。我可以信任我的主要程序员,但现在我需要雇佣额外的帮助。我发现了一些优秀的程序员,但我担心允许他们FTP访问我们的系统开始工作,我不敢允许他们访问所有文件

我的主要问题是:如何允许开发人员只访问他需要更改的特定文件?

我考虑过用ionCube或类似的东西对整个项目进行加密,然后只对特定文件进行解密,但这是一个麻烦的解决方案。另一个想法是在主代码中添加PHP include()语句到他将处理的文件中,从而将这些文件限制在一个文件夹中,并允许他访问该文件夹。这也很麻烦,因为关键字范围等可能会成为一个问题。此外,开发人员在自己的文件中编码只是部分修复,因为他需要查看其他几个相关文件中的方法/函数/类的内容。如果只选择开发人员可以访问的文件列表,而不允许他查看其他文件,那就太好了。这将允许我打开一个足够小的窗口,让开发人员可以自由地编写代码,而无需对他/她进行微观管理(或将开发人员编写的代码放入主文件中)

这实际上是为了保护代码库。我没有企业发展经验,所以我不确定“大人物”是如何做到的。任何建议/给我指出正确的方向都会大有帮助


所以很明显你的项目结构不好。否则,您可以将其拆分为单独的存储库,其中每个存储库都是“上下文之外”的,因此访问它在“窃取业务逻辑”方面仍然是无用的,但足以执行一些开发

尝试将其拆分为单独的部分作为包,然后将它们放入您的
供应商
目录中,每个包都有自己的
git
存储库

然后(你猜到了),你只授予一个特定的回购协议,而不必担心,你的整个“代码”都会被偷


但除此之外,你应该先信任你雇佣的人

首先,这个问题并不像反对票所说的那么糟糕。就一个实时系统而言,假设一家公司遭受了数据泄露,结果证明这是因为一个开发人员流氓,从配置文件中查找数据库凭据,然后滥用这些知识;这名员工显然有罪,但该公司也会疏忽大意,可能会被追究责任,因为通过编码或其他方式,他们本来可以采取措施阻止访问凭据,但他们没有为此烦恼。这将是该公司未能尽最大努力保护导致安全漏洞的数据库凭据

大型组织可能会有一个变更控制团队,负责部署变更,这样,任何开发人员都无法访问实时系统。可以做类似的事情,开发人员对代码进行更改,第三方在部署到实时系统之前审查更改。这不是微观管理,而是确保额外的一双眼睛能够回顾已经做了什么,可能会产生什么影响,并有机会发现意外错误。审阅者在看到部署的更改时没有投入感情,而是关心他们将对系统做什么,是否有数据库更改,何时是部署的最佳时间,将影响谁,如果需要,他们如何回滚,谁需要被告知变更等等。开发人员很可能不考虑这些事情。在实时系统上使用版本控制作为一种轻松回滚以及记录正在发生的事情的方法也是非常有效的


如果希望阻止一组开发人员在开发过程中看到一些代码,那么编码肯定是一种可能性,而且这可能是出于法律原因而不是个人原因。这可以通过为每一组要限制的代码使用不同的存储库来实现,并且开发人员可以使用一个工具在某些版本或其他版本中获取代码的受保护版本。一种相关的方法可以是使用文件的编码版本维护影子存储库。这可以使用源存储库上的post-commit钩子进行更新,并允许开发人员仅访问编码的存储库以在其外部配置中引用(使用SVN术语)。

“该框架结构良好,文件组织良好”,不,不是。如果是这样的话,这不会是个问题。你也应该雇佣你信任的人。“大人物”雇佣他们可以信任的人。^^^并签订适当的保密合同。听起来你的绝大多数问题都可以通过简单地使用好的VCS(即:git)和可靠的代码审查流程来解决。代码永远不应该在没有额外审查的情况下直接从开发环境通过FTP进入生产环境。您肯定需要做一些研究。VCS不仅仅是一种协作工具。我做过很多项目,我是唯一的开发人员,每一步都使用git。至少你应该意识到,如果没有别的事情的话,它会促进未来的你和过去的你之间更好的合作。(我过去是个白痴,写垃圾代码)我绝对信任我的人,但你怎么能信任新员工呢。我有NDA,我只是不想一开始就走这条路!这主要是为了程序员,因为他们开始了,我们建立了信任。但是,是的,我明白你关于“完全独立存储库”答案的观点。这些文件是almo