我们的应用程序具有在线商店和其他功能,并且通常要求用户在完成销售之前进行注册,从而customer_ID在该过程中创建独特的.当他们返回时,他们可以登录并从数据库中检索他们的联系方式和交易历史记录.
我们现在正在探索在"匿名"或"客户"客户的情况下该做什么,向不想注册的客户开放在线商店,以及在后端应用程序中记录的销售情况,其中客户是电子邮件,邮政地址等太费时间了.该解决方案也可以在网上商店之外使用.
多个公司使用相同的数据库,数据库建立在派对模型结构上,因此我们探索了几个选项:
customer_ID在transaction表中预定义的客户下:
customer_ID = 0为每个匿名用户和customer_ID > 0每个真实用户
customer_ID = 0存在于customer数据库的表中或作为应用程序中的对象?
transaction.customer_ID,以customer.customer_ID不再工作customer_ID 和公司一样 party_ID
customer_ID为每个新的匿名客户生成唯一的(每个会话)
加成
在其他地方建议使用#2和#3的组合 - 尝试为每个客户存储单个记录,如果可能,使用电子邮件地址,或者如果没有,则在每次访问时记录新记录.
我要指出的是,我们并不需要存储一个记录每一个匿名的客户,但它只是似乎关系数据库的建立是为了对付的关系,所以有一个空或customer_ID在transaction表中没有引用实际客户记录似乎错了......
我还必须强调,这个问题的目的是确定在没有邮寄地址或电子邮件地址的情况下记录"临时"交易的真实解决方案(想象一个超市的chekout)以及电子邮件地址和网上商店交易.邮政地址是否存储.
SO社区过去使用了哪些解决方案?
我只是想知道在团队中工作的人如何管理后端的逻辑和验证之间的关系,例如在php中,以及前端完全相同的逻辑和验证,例如在JavaScript中?
理想情况下,最后的说法应该由后端给出,但为了使应用程序更易于访问,最好使用JavaScript在前端尽可能多地模仿.我显然试图最大限度地减少代码重复,随着项目变得越来越大,我发现管理前端内容如何从后端的东西"复制"变得更加困难.危险在于,由于它们没有紧密耦合,有时前端验证可能与后端"不同步" - 特别是当有一个流氓JavaScript开发人员认为他们有更好的方法进行某些验证时!
有没有人有任何见解?
编辑
更简洁一点,我的问题实际上是关于人员团队在逻辑重复方面如何管理"papertrail"(或者前端如何按照Fanis的建议访问后端),而不是实际的实现.例如,您是否在后端代码中留下了"前端复制/访问此位"的注释,或者是否有更"专业"的方式来跟踪正在执行的操作?
任何人都可以推荐信息来源或工作示例,说明在与管理系统用户和网站用户同时处理时如何处理访问权限?
我们的代码目前有点像在线商店的大版本,有几名员工使用管理系统管理订单,以及使用该网站的任意数量的客户.管理系统是围绕一个访问控制列表(如LiveUser)构建的,但有一个相当大的"创可贴",与一个"虚拟"用户一起担任所有网站用户(所有客户)的角色.
理想情况下,应用程序代码将使用类似的短语can_place_order()来确定用户是否可以执行任务.只要库存水平至少与订单数量一样多,并且他们已经对订单的价值进行支付,客户就可以下订单.只要具有"customer_services"角色,管理员用户就可以下订单.
理想情况下,我们希望扩展系统,以便我们可以让某些注册客户在没有足够库存或支付的情况下下订单,只需生成发票和延期交货.除了许多员工的角色之外,这至少会有两个客户"角色"......
我们使用php和MySQL作为应用程序,但欢迎任何其他语言模式.
我们正在为预订应用程序使用派对模型,以便客户和员工有效地共享数据库中的同一个表.
以前,如果他们付款并且有空位,客户只能"预约"预约.现在,我们希望创建一个premium_customer类型角色,以便客户无需支付即可进行预订,即使没有可用性.
将客户添加到单个安全模型(例如ACL或RBAC)中是否有意义?
normal_customer,并premium_customer与我们的reception,并duty_manager和其他工作人员的角色?这里的一些人正在开发一个应用程序,其中包含一些可通过登录访问的"安全区域".过去,登录表单和随后的"安全"页面都是通过http传输的纯文本,因为它是一个应用程序在没有机会使用SSL的共享服务器上使用(想想WordPress等).大多数人只是耸了耸肩,因为这是他们所期望的 - 它几乎不是国家银行.
我们现在考虑使用JavaScript前端编写下一个版本,其优点是加载所有图像和CSS一次,然后使用extJS(或者jQuery)将HTML写入DOM.我们希望在发送到服务器之前在客户端加密用户输入,然后在呈现给HTML之前在浏览器处解密服务器输出,以便为用户引入某种安全性.减少页面加载时间也有所收获,因为我们只是来回发送gzip压缩包.
在玩游戏时,我们意识到我们正在考虑加密基本内容的方法也首先加倍作为登录的身份验证机制.
为简单起见......:
username,password并secret进入一个登录表单.username,并password通过AJAX服务器.将secret只存储在JavaScript和在互联网上永远不会发送.username并secret从数据库中检索.username并secret返回浏览器.username和secret,并将其与从服务器发回的哈希值.response与secret和发送消息回服务器.secret以找到预期response并启动新会话.secret.这类系统似乎有一些优点,但我们是否正确思考:
username并且secret证明服务器知道并理解username并且用户知道他们正在与他们的服务器通话secret.response与secret,证明用户知道secret.secret不会以纯文本传输,或者是否可以secret从散列中确定.这一切看起来都很快,以至于用户难以察觉.任何人都可以看到这一点,因为我们都假设我们不应该使用JavaScript加密!