[分享]openerp-server.conf 中配置 dbfilter 参数无效的解决办法
-
以前就发现过这个问题, 今天重新在群里同大家讨论了一下.
有时候可能我们希望用户不从登陆界面的账套选择处进入各个账套(因为如果未曾登陆过OE时, 默认会登陆第一个账套), 这时也容易造成错误. 所以, 一般的做法就是使用 openerp-server.conf 中的 dbfilter 参数进行限定.
而大部分做法就是
dbfilter = ^%d$ # 即取 OE WEB访问时取地址栏上 域名的第末子域.
即 [检测到链接无效,已移除] 访问时, 会自动设置为 dbfilter = db001
在 openerp-server.conf 中 限制 db_list = False, dbfilter = ^%d$ 后. 发现并不生效
从抓包 与 跟踪源码的结果 是
web 获取当前账套列表 /web/db_list 时, 还是取得了所有的账套列表.
从 /web/controller/main.py 的 db_list 跟踪得到 openerp.tools.config['dbfilter'] 并没有取到 openerp-server.conf 中的配置项值.而是使用了 /openerp/tools/config.py 文件中<br /> group.add_option("--db-filter", dest="dbfilter", default='.*',<br /> help="Filter listed database", metavar="REGEXP")<br />
中的 default='.' 值
这个 default='.' 将配置文件中的设置又盖掉了.
开发群中 上海-baggio(317016042) 给出问题所在. 在 /openerp/tools/config.py 文件中, 在 openerp-server.conf 中的生效项. 必须使用 my_default 参数.
所以, 将上述行代码改成<br /> group.add_option("--db-filter", dest="dbfilter", my_default='.*',<br /> help="Filter listed database", metavar="REGEXP")<br />
即可以 让 openerp-server.conf 文件中的 dbfilter 项生效.
其他的配置 文件项,同样的操作方式..
感谢 上海-baggio(317016042) 的分享.. -
你那个还是针对配了二级子域名的情况,http://ip:port/web?db=openerp 针对这种情况无效的
我的做法是 针对这种情况,只能在 init.d 里自启动脚本里 添加 启动命令 附加 [size=13px][font=Verdana]--db-filter='oe8'[/font][/size]
[font=verdana, arial, helvetica, sans-serif][size=2]这种情况在 openerp8.0下测试通过,客户可以直接访问对外的 pubulic website 了[/size][/font] -
谢谢总监大人,我明白了
-
oe8 website特性 要想给公众 public 访问,必须配好单数据库模式,看来只能从oe8代码角度破除这个限制了。
-
def db_filter(dbs, httprequest=None):
httprequest = httprequest or request.httprequest
h = httprequest.environ.get('HTTP_HOST', '').split(':')[0]
d, _, r = h.partition('.')
if d == "www" and r:
d = r.partition('.')[0]
r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
dbs = [i for i in dbs if re.match(r, i)]
return dbs
8.0 rc 改成上面这样了,看不懂