案例:我正在建立一个论坛,使用Laravel的授权作为使用策略的主干.我运行检查的例子是这样的东西@can('view', $forum),并且@can('reply', $topic),Gate::allows('create_topic', $forum)等等.这些检查主要检查,如果用户角色对特定的论坛,主题或帖子的许可.这样我就可以为我的应用程序中的每个论坛赋予角色非常具体的权限.
问题是所有这些检查都通过Gate类,特别是raw()在第一行中调用的方法:
if (! $user = $this->resolveUser()) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
这在处理论坛时会出现问题.我的应用程序的访客也应该被允许查看我的论坛,但是从上面的代码可以看出,如果用户没有登录,Laravels Gate类会自动返回false.
即使没有用户,我也需要能够触发我的策略.用我的ForumPolicy@view方法说,我做if(User::guest() && $forum->hasGuestViewAccess()) { return true }
但正如您所看到的,此方法永远不会触发.
我还有办法让访客用户使用Laravel的授权功能吗?
我的关联模型看起来像这样(不相关的代码编辑):
class Association extends Model
{
public function members() {
return $this->hasMany('App\Member');
}
}
Run Code Online (Sandbox Code Playgroud)
我的会员模型如下所示:
class Member extends Model
{
public function scopeActive($query) {
return $query->where('membership_ended_at', Null);
}
public function scopeInactive($query) {
return $query->whereNotNull('membership_ended_at');
}
}
Run Code Online (Sandbox Code Playgroud)
这是我希望能够做到的:
$association = Association::find(49);
$association->members->active()->count();
Run Code Online (Sandbox Code Playgroud)
现在,我知道Query和Collection之间存在差异.但我基本上要问的是,是否有某种类似的收藏范围.当然,最佳解决方案是不必编写两种活动方法,而是将两种方法用于两种用途.
我正在尝试制作一个完全受登录页面保护的网站。用户登录后,他们将被重定向到主页面,该页面具有完全不同的布局。
MainLayout (包括标题、侧边栏等)
LoginLayout (将页面上的所有内容居中,但不包括上述元素)
FutureLayout (我希望以后能够对不同的页面使用不同的布局)
目前,我面临的最大问题是每次更改路线时,一切都会重新渲染。我有点理解为什么会发生这种情况,但我一直无法找到解决方法。
这是我目前的一些进展
https://codesandbox.io/s/6l10v4o7jn
const HomePage = () => (
<MainLayout>
<h1>HOME PAGE</h1>
</MainLayout>
);
Run Code Online (Sandbox Code Playgroud)
这显然是因为每次你移动到另一个页面,在不工作Page重新呈现Layout。您可以通过green在任一HomePage或AboutPage然后切换路线上切换按钮来查看此操作
https://codesandbox.io/s/moj437no58
<Route render={() => (
<MainLayout>
<Route exact path="/" component={HomePage} />
<Route path="/about" component={AboutPage} />
</MainLayout>
)} />
<Route render={() => (
<LoginLayout>
<Route path="/login" component={LoginPage} />
</LoginLayout>
)} />
Run Code Online (Sandbox Code Playgroud)
这解决了状态问题,但当然它同时呈现两种布局,因为有注意告诉它不要,但正如预期的那样,页面仍然由路由器确定。
在实际应用中,这些线路将被抽取到像自己的分量<AuthRoutes>和<PublicRoutes>
我还计划使用connectedRouterRedirect来自redux-auth-wrapper来处理保护我的路由,这在使用我发现的一些建议时可能会出现问题。
我相信这是因为包装器如何作为 HOC 与Route …
我需要在论坛上授权用户.所以在刀片中,我@can('editPost', $post)在显示表单以回复主题之前.我的PostPolicy类有一个editPost方法,如果它是用户自己的帖子,则验证为true.
但是,当我想做一个简单的检查时,会出现问题deletePost().这将检查是否Auth::user()->isAdmin
public function deletePost(User $user) {
return Auth::user()->isAdmin;
// return $user->isAdmin
}
Run Code Online (Sandbox Code Playgroud)
但是,这甚至都不会被调用,因为我没有传递一个实例 Post
我的真实世界应用程序要复杂得多,但我用的isAdmin是一个简单的例子.
我猜定义$gate->define('deletePost', 'App\Policies\PostPolicy@deletePost');中AuthServiceProvider可以工作,但将最终分开我的定义和方法,并最终为大型应用程序的混乱AuthServiceProvider
所以我有一个测试设置,访问注册页面并提交表单.然后,测试通过令牌验证帐户.
帐户验证后,会通过帐户发送通知 SlackMessage.
我想知道的是我如何拦截这一点,并阻止实际发送的松弛消息 - 仅在运行测试时,但获得某种确认通知实际上被调用的确认.
我一直在努力让 VueJS 和 TinyMCE 一起工作。我得出的结论是,使用指令是可行的方法。
到目前为止,我已经能够将主体作为指令参数传入,并且 tinyMCE 设置内容。但是,我无法让两种方式绑定工作。我也担心基于tinyMCE api我做的事情完全错误。
我假设的相关 tinyMCE 函数是:
http://community.tinymce.com/wiki.php/api4:method.tinymce.Editor.setContent
// Sets the content of a specific editor (my_editor in this example)
tinymce.get('my_editor').setContent(data);
Run Code Online (Sandbox Code Playgroud)
和
http://community.tinymce.com/wiki.php/api4:method.tinymce.Editor.getContent
// Get content of a specific editor:
tinymce.get('content id').getContent()
Run Code Online (Sandbox Code Playgroud)
<div id="app">
<h3>This is the tinyMCE editor</h3>
<textarea id="editor" v-editor :body="body"></textarea>
<hr>
<p>This input field is properly binded</p>
<input v-model="body">
<hr>
<pre>data binding: {{ body }} </pre>
</div>
Run Code Online (Sandbox Code Playgroud)
tinymce.init({
selector:'#editor',
});
Vue.directive('editor', {
twoWay: true,
params: ['body'],
bind: function () { …Run Code Online (Sandbox Code Playgroud) 所以我有一个带有深度嵌套的评论系统.我正在使用bootstraps javascript文件,但只有崩溃和动画css样式.所以我不使用nav-tab等等
所有有回复的评论都有一个按钮.该数字1是指父项的ID(ID为1的注释的回复).
<a class="btn" type="button" data-toggle="collapse" href="#replies_1">X replies</a>
然后我有一个div,这是父评论的所有孩子的容器
<div class="collapse" id="replies_1">
当我点击锚点时,正如您所猜测的那样,这个div会附加到类中in并很好地转换为打开并显示注释子项.
除了滚动部分,我尝试了一件有用的东西
$(document).ready(function(){
if(window.location.hash != "") {
$('a[href="' + window.location.hash + '"]').click();
}
});
Run Code Online (Sandbox Code Playgroud)
这打开了正确的选项卡,这很棒.但是,由于选项卡具有collapse包含css规则的类display:none;并添加了内联规则display: none;
现在,我的脚本无法滚动到正确的位置,因为折叠的元素具有这些规则.
虽然,我真的不需要滚动到回复,但父母.
所以我真正需要的是滚动到另一个锚ID,它具有相同的后缀ID,但前缀不同,但仍然打开回复标签,就像我上面的代码一样
由于孩子们在id为的标签内replies_{id},我可以滚动到父级,这是一个ulid 为的项目comment_{id}
该ul如下所示:<ul class="comment__item" id="comment_{id}">
假设我package.json在现有项目中有一个文件。在那里我有"some-package": "^1.0-01",,但是我知道最新版本是1.0-02
所以我做yarn upgrade。但是,package.json不是更新,仍然引用 -01版本。yarn.lock然而,该文件显示了这一点:
some-package@^1.0-01:
version "1.0-02"
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?当其他人执行yarn命令时,他们将获得哪个版本。如果他们获得最新版本,显示-01在 中是不是会产生误导package.json?
laravel ×4
laravel-5 ×3
laravel-5.1 ×3
php ×3
javascript ×2
jquery ×1
laravel-5.3 ×1
react-router ×1
reactjs ×1
scope ×1
tinymce ×1
vue.js ×1
yarnpkg ×1