我正在尝试授权用户角色删除/更新帖子.我正在使用策略这样做,但我只能将一个参数传递给策略函数.如果我传递的不仅仅是用户和另一个变量,则该变量不会传递给该函数.
模特:用户有很多字符,一个字符可以发布多个帖子.因此,出于授权目的,我必须将帖子的character_id与当前角色的id进行比较......-
根据文档,您可以将更多倍数传递给Gate Facade:
Gate::define('delete-comment', function ($user, $post, $comment) {
//
});
Run Code Online (Sandbox Code Playgroud)
但无论如何我都找不到政策.我必须做的是注入Request对象以获取授权所需的对象.基本上我甚至不需要用户对象.
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
Run Code Online (Sandbox Code Playgroud)
使用Request对象可以工作,但感觉非常hacky.有没有更好的方法来实现这一目标?
编辑:
在CharacterLocationController我有一个方法show,我想在显示资源之前授权该操作.
public function show(Request $request, Character $character, Location $location)
{
$this->authorize([$location, $character]);
...
}
Run Code Online (Sandbox Code Playgroud)
政策是这样注册的:'App\Location' => 'App\Policies\LocationPolicy'在AuthServiceProvider
我将转发的数组转储到策略函数中,它只输出$location.
public function show(User $user, $data) {
dd($data); // expecting location and character
return !$location->private || $location->authorized->contains($this->character);
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用Laravel 5.3的Auth Scaffolding,包括api路由.我想为api后卫使用会话驱动程序,但显然这没有任何影响.我登录到使用有效的用户应用程序之后(所以我从获取/login到/home)我试图进入的路径/api/user,但它总是重定向我/home.该RedirectIfAuthenticated中间件将用户重定向.
以下是我尝试过的内容以及测试应用程序的快速概述:
// In "app\Http\Middleware\RedirectIfAuthenticated.php"
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
Run Code Online (Sandbox Code Playgroud)
$guard为null,浏览时if为true /api/user.
// In "config\auth.php"
'api' => [
'driver' => 'session', // changed from token to session
'provider' => 'users',
],
Run Code Online (Sandbox Code Playgroud)
我改变了api后卫的司机session.
// In "app\Http\Kernel.php"
'api' => [
'throttle:60,1',
'bindings',
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
],
Run Code Online (Sandbox Code Playgroud)
我添加了中间件以支持api中间件中的cookie
// In "routes\api.php"
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:api');
Run Code Online (Sandbox Code Playgroud)
这是一个新的Laravel安装附带的示例.
// In "app\Providers\RouteServiceProvider.php"
Route::group([
'middleware' => 'api', …Run Code Online (Sandbox Code Playgroud) 我在同步脚本加载和使用jQuery执行它时遇到问题.
我看起来像这样:
// Load Libraries in 'when'
$.when(
loadJSFile("lib1.js"),
loadJSFile("lib2.js")
loadJSFile("lib3.js")
).then(function() {
// Load JS files that use the library files
loadJSFile("file1.js");
loadJSFile("file2.js");
loadJSFile("file3.js");
// needs to return deferred object...
}).then(function() {
// Call functions declared in file1, file2 and file3
func1();
func2();
func3();
});
Run Code Online (Sandbox Code Playgroud)
loadJSFile通过$ .getScript加载一个javascript文件,如果它尚未包含在DOM中,则返回$ .getScript Promise,或者不返回任何内容(如果已经包含).
我认为第一个调用必须返回Promise/Deferred,但是如何使用3个Deferred对象?
上面的代码在加载file1到file3之前调用3个函数(func1,func2和func3)...
我使用websockets和vuejs构建了一个web应用程序.
在DOM中,我想循环遍历vuejs处理的数据.然而,在建立websocket连接并且已经接收到数据之后,在时间线中稍后设置数据.
到那时(大约0.5秒),你可以在网站上看到vuejs的胡子代码,然后看到它闪烁并添加真实数据.
我从websocket连接接收数据时创建ViewModel,如下所示:
onMessage: function (e) {
new Vue({
el: '#messages',
data: {
messages: e.data
}
});
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过在页面加载时初始化ViewModel,并在以后设置数据:
var vms = {
messages: new Vue({
el: '#messages',
data: {
messages: {
}
}
})
};
Run Code Online (Sandbox Code Playgroud)
在onMessageWebSocket的事件:
var vm = vms.messages;
vm.$data = { messages: body };
Run Code Online (Sandbox Code Playgroud)
但问题是,在vm初始化之前仍有延迟.顺序是这样的:
页面加载 - >可见胡子代码 - >胡须代码被隐藏,因为数据被设置为空对象 - >实际数据显示在websocket收到之后
关于这个问题的任何想法/最佳实践?
我在经过数学处理的 lstlisting 环境中转义美元符号时遇到问题
\begin{lstlisting}[mathescape]
$\delta$(Z, $\varepsilon$, $S) = (R, $\varepsilon$)
^
\end{lstlisting}
Run Code Online (Sandbox Code Playgroud)
在相关问题的回答的帮助下,我有了使用另一个符号而不是像这样的美元符号的想法:
\lstset{
literate={\§}{{\textcolor{black}{\$}}}1
}
Run Code Online (Sandbox Code Playgroud)
但是当我\§在列表中使用时,我得到的\$不是$.
我正在寻找一种方法来为 svg 导出的标签添加多个链接,但我不能有多个边缘。
现在我有这样的事情:
Node1 -> Node2 [ href="some.resource.xyz", label="Resource\nAdditionalInfo" ]
Run Code Online (Sandbox Code Playgroud)
我需要的是有这样的东西:
Node1 -> Node2 [
label="Resource\n # href to "some.resource.xyz"
Additional Information" # href to some.additional.info
]
Run Code Online (Sandbox Code Playgroud) 我在这里找到了LinusBorg的解决方案,它在任何Vue实例中全局注册总线.有没有办法在组件层次结构中定义它,以便我可以创建多个范围的总线?基本上,如果我有一些带有一些子节点的"root"级组件,则应该为"root"级别组件和它的子节点而不是所有Vue实例设置事件总线.
我不能用简单的$emit和$on,因为层次不局限于简单的parent-child通信.所以事件必须通过多个级别传递.
我想用BroadcastManager注册一个自定义广播器,而不必更改内部框架代码......
现在我必须在Illuminate\Broadcasting\BroadcasterManager课堂上做这样的事情:
protected function createMyCustomDriver(array $config) {
// return instance....
}
Run Code Online (Sandbox Code Playgroud)
但是有一种扩展方法,但我不知道它是否适用于这个用例或如何使用它...
目标是使用Broadcaster实现,该实现使用ZMQ将这些广播事件发送到WebSocket php服务器实例.
任何帮助赞赏!
编辑:链接到api doc http://laravel.com/api/5.1/Illuminate/Broadcasting/BroadcastManager.html
我需要将一些公式放到HTML中,并要对值的来源进行描述。在TeX中,我将简单地使用overbracket / underbracket软件包(例如,请参见https://tex.stackexchange.com/questions/132526/overbrace-with-square-bracket)。
是否有类似的“库”或仅使用CSS就能达到相同效果的“库”?(只用方括号就可以了)。
我自己尝试重新创建外观类似的东西,但是在尝试显示支架时遇到了问题。
例如,我尝试使用表格来使描述显示在公式的上方或下方,但随后公式的一部分不再与其余公式在同一行。另外,使用边框我无法重新创建链接中所示的方括号...
编辑:所以这应该可视化我遇到的问题:
的CSS
table {
display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)
html
<table>
<tr><td>+1</td><tr>
<tr><td>value #1</td><tr>
</table>
<table>
<tr><td>value #2</td><tr>
<tr><td>+1</td><tr>
</table>
= 10
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/jcqjr8ge/
基本上,所有的“ +1”和“ = 10”应该在同一行上,因为对这些值的描述应该在这些值的上方或下方。
我正在尝试以编程方式从对象中添加和删除(用于缓存目的)getter。我正在添加一个这样的吸气剂:
Object.defineProperty(obj, 'text', {
get: getter
})
Run Code Online (Sandbox Code Playgroud)
obj.text 只应在第一次访问时对其进行评估,并将计算出的值缓存以供后续调用使用。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get展示了如何实现这样的智能 getter:
get notifier() {
delete this.notifier;
return this.notifier = document.getElementById('bookmarked-notification-anchor');
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法delete this.text在我的getter函数中使用。我发现的是,这this是对象的原型而不是实例 - 对吗?如果是这样,我如何删除实例的 getter 并将其替换为计算值?
编辑:
根据评论,getter 和 object 看起来像这样:
var obj = {}
obj.value = '2018-04-21T12:00:00Z000'
Object.defineProperty(obj, 'text', {
get: function () {
delete this.text // doesn't seem to work
if (this.value == null) return ''
var text = this.value.split('T')[0].split('-').reverse().join('.')
this.text = text
return text // return this.text ends in …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Laravel 5 开发应用程序,但遇到了以下问题:
例如,当我包含来自外部服务器的 .js 文件时,脚本加载了未修改的 304 - 这很好。根据 chrome 的网络选项卡,它在 146 毫秒内加载。当我包含本地资产时,使用 {{ asset('path to asset') }} 我总是得到 200,并且加载文件需要更长的时间(大约 800 毫秒)。
如何管理缓存资产文件?我猜这是浏览器或网络服务器的问题。
php ×4
javascript ×3
laravel ×3
vue.js ×2
caching ×1
css ×1
getter ×1
graphviz ×1
html ×1
jquery ×1
laravel-5.1 ×1
laravel-5.2 ×1
laravel-5.3 ×1
latex ×1
listings ×1
svg ×1
tex ×1
websocket ×1