我有三个表来定义用户:
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
Run Code Online (Sandbox Code Playgroud)
我想创建一个中间层用户,该用户可以访问应用程序中的其他用户.要确定登录使用的用户可以访问哪些用户,我使用如下的子查询:
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
Run Code Online (Sandbox Code Playgroud)
目前,我将子查询字符串存储在变量中,然后在每次需要提取用户列表时将其动态插入到外部查询中.在这样做之后,我想,"只需存储一串实际的user_id
s 就更好了".
所以不要将其存储在变量中......
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
Run Code Online (Sandbox Code Playgroud)
...我实际执行查询并存储结果,如...
$subSql = "12, 56, 89, 100, 1234, 890";
Run Code Online (Sandbox Code Playgroud)
然后当我需要拉出登录用户可以访问的点亮用户时,我可以这样做:
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
Run Code Online (Sandbox Code Playgroud)
最后问题是:
您可以在MySQL IN …
假设您在服务器上的目录中有很多html,css,js,img等文件.通常,只需输入完整的URL就可以访问Internet-land中的任何用户:http://example.com/static-files/sub/index.html
现在,如果您只希望授权用户能够加载这些文件,该怎么办?对于此示例,假设您的用户首先从以下网址登录:http://example.com/login.php
您将如何允许登录用户查看index.html文件(或"static-files"下的任何文件),但将文件限制为其他所有人?
到目前为止,我已经提出了两种可能的解决方案:
解决方案1
在"static-files"下创建以下.htaccess文件:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ ../authorize.php?file=$1 [NC]
Run Code Online (Sandbox Code Playgroud)
然后在authorize.php中......
if (isLoggedInUser()) readfile('static-files/'.$_REQUEST['file']);
else echo 'denied';
Run Code Online (Sandbox Code Playgroud)
这个authorize.php文件大大简化了,但你明白了.
解决方案2
在"static-files"下创建以下.htaccess文件:
Order Deny,Allow
Deny from all
Allow from 000.000.000.000
Run Code Online (Sandbox Code Playgroud)
然后我的登录页面可以为每个登录的用户附加带有IP的.htaccess文件.显然,这还需要某种清理例程来清除旧的或不再使用的IP.
哪些解决方案听起来更好,为什么?或者,你能想到一个完全不同的解决方案,它会比其中任何一个更好吗?
我正在开发一个html应用程序,它本质上是一系列页面,如书.在这个应用程序中,我想在页面中存储几个JavaScript变量.考虑页面读取,书签等等.当通过HTTP查看此应用程序时,我计划将localStorage与旧浏览器的回退(globalStorage,userData等)一起使用.
但是,如果通过"file://"访问文件,则会完全崩溃,例如,如果从CD上查看.似乎大多数(如果不是全部)localStorage解决方案都不能在文件协议下工作.Cookie不是"file://"下的选项.
有关如何在通过"file://"查看html页面时保存JavaScript数据的任何想法?
它实际上只需要在当前用户会话中可用.我真的不想使用框架,但到目前为止,我想不出另一种方法来实现这一点
我一直在开发Backbone应用程序,我刚开始学习使用Backbone和Require.js.
在我重构的骨干应用程序中,我定义了一个这样的命名空间:App.model.repo
.该模型在不同视图中反复使用.例如,我用一些集合做同样的事情App.collection.files
.使用初始索引文件请求引导这些模型和集合.
我确实找到了这个示例,这看起来像是获取引导数据的好方法.但是,我正在努力寻找重用/共享这些模型和视图之间的集合的最佳方法.
我可以想到三种可能的解决方案.哪个最好,为什么?或者是否有我完全遗漏的另一种解决方案?
解决方案1
在索引中定义这些常用模块和集合(当它们被引导时),然后将它们作为选项(of initialize
)传递给每个Backbone视图.
define(['jquery', 'underscore', 'backbone', 'handlebars', 'text!templates/NavBar.html'],
function($, _, Backbone, Handlebars, template){
return Backbone.View.extend({
template: Handlebars.compile(template),
initialize: function(options){
this.repoModel = options.repoModel; // common model passed in
}
});
}
);
Run Code Online (Sandbox Code Playgroud)
就分离来说,这些看起来很干净,但是可以快速得到时髦,大量的东西都会传遍整个地方.
解决方案2
定义globals
模块,并向其中添加常用的模型和集合.
// models/Repo.js
define(['backbone'],
function(Backbone){
return Backbone.Model.extend({
idAttribute: 'repo_id'
});
}
);
// globals.js (within index.php, for bootstrapping data)
define(['underscore', 'models/Repo'],
function(_, RepoModel){
var globals = {};
globals.repoModel = new Repo(<?php echo json_encode($repo); ?>); …
Run Code Online (Sandbox Code Playgroud) 我必须在这里找到一些简单的东西.
我正在学习Backbone和Underscore/loDash,我正在努力学习chain
.
我有以下代码,它按预期工作:
var ids = _.pluck(collection.where({'is_checked':true}), 'id');
Run Code Online (Sandbox Code Playgroud)
我尝试重构这个,使用chain
如下:
var ids = collection.chain().where({'is_checked':true}).pluck('id').value();
Run Code Online (Sandbox Code Playgroud)
为什么重构代码不起作用?我用chain
错了吗?
解决方案(详见下方)
不要使用where
带chain
.
据我已经能够告诉,listenTo
并stopListening
应更换on
和off
分别.我理解正确吗?是否有任何情况应该on
/ off
应该使用而不是listenTo
/ stopListening
?
编辑:
当我去重构我的代码时,很明显有些情况可以on
结束listenTo
.该文档是很清楚,它是当一个对象监听到另一个对象:
告诉一个对象来听一个特定事件上的其他对象.
因此,当a collection
或model
正在听自己的事件时,我们应该使用on
而不是listenTo
.
假设我有这个正确的......
遵循的简单规则是:
listenTo
在侦听另一个对象上的事件时使用.on
在听取自我事件时使用.
我想创建一个作为每日cron运行的PHP脚本.我想要做的是枚举Active Directory中的所有用户,从每个条目中提取某些字段,并使用此信息更新MySQL数据库中的字段.
基本上我想要做的是在Active Directory和MySQL表之间同步某些用户信息.
我遇到的问题是,Active Directory服务器上的sizelimit通常设置为每个搜索结果1000个条目.我曾希望php函数"ldap_next_entry"能够通过一次只获取一个条目来解决这个问题,但是在你可以调用"ldap_next_entry"之前,首先必须调用"ldap_search",这可能会触发SizeLimit超出错误.
除了从服务器上删除sizelimit之外还有什么方法吗?我可以以某种方式获得结果的"页面"吗?
顺便说一句 - 我目前没有使用任何第三方库或代码.只是PHPs的ldap方法.虽然,如果有帮助,我肯定愿意使用图书馆.
我试图让exec在Windows服务器上工作并收到错误消息"无法分叉".在谷歌搜索了一下之后,似乎推荐的修复方法是将IUSR帐户的READ和EXECUTE权限授予c:\ Windows\System32\cmd.exe.
但那已成为一个重要的安全漏洞吗?安全吗?还有另一种方法来执行[来自php]一个驻留在服务器上的exe吗?
假设您有10页的调查(每页一个问题).在每个页面的顶部,您包含文本"问题2 of 10".这种事情是" 进步 "还是" 计量 "的好选择?
从语义上讲,"进步"最初似乎是最合适的.但是,我阅读和查看的例子越多,我认为"米"可能更合适.
<meter max="10" value="1">Question 1 of 10</meter>
<progress max="10" value="1">Question 1 of 10</progress>
Run Code Online (Sandbox Code Playgroud)
今天所有主流浏览器默认使用页面缩放,而不是"文本大小"."文字大小"选项仍然存在,但它们更隐蔽[特别是在Chrome和Firefox中].鉴于这一事实,EMs是否优于PX或%?为什么?