我有一个与Post模型有HasMany关系的User模型。当在Nova的用户资源中包含HasMany的字段时,我看到有Create post
button。如何删除/隐藏该按钮?
答案 0 :(得分:1)
您可以使用Policies
来实现。
根据文档:
如果存在策略,但缺少用于特定操作的方法,则将不允许用户执行该操作。因此,如果您已定义策略,请不要忘记定义其所有相关授权方法。
因此,在您的情况下,如果您想完全隐藏按钮,则只需为您的资源(PostPolicy
)创建策略,而不要实现create
方法。
答案 1 :(得分:1)
此问题在laravel nova official documentation
中得到了回答就我而言,我有 user 模型和 order 模型,我添加了 user Hasmany order
public function addOrder()
{
return false;
}
现在根据用户政策创建角色按钮在用户详细信息页面上消失了 this is a screenshot of user detail page
答案 2 :(得分:0)
您需要在这里做两件事。
在您的帖子资源中
公共静态函数authorizable() { 返回true; }
现在为Post和return true
的所有方法创建策略,除了create,用于创建return false
和AuthServiceProvider.php
的
放入
protected $policies = [
Post::class => PostPolicy::class,
];
您完成了。
答案 3 :(得分:0)
如果有人仍在寻找解决方案,您可以授权在策略中附加/分离资源:
https://nova.laravel.com/docs/2.0/resources/authorization.html#authorizing-attaching-detaching
因此,在这种情况下,您要向其中添加功能的const arrayIndexRef = useRef(0)
const arrayIndex = arrayIndexRef.current
useEffect(() => {
if(!startGame) return
const timer = setInterval(() => {
arrayIndexRef.current += 1
if (arrayIndexRef.current >= 9) {
clearInterval(timer)
}
}, 5000)
return () => clearInterval(timer)
}, [startGame])
:
UserPolicy
attachPost(User $user, User $model, Post $post)
{
return false;
}
变量是已登录的用户,$user
变量是已查看的用户页面。
答案 4 :(得分:0)
如果你像我一样,你最不想做的事情就是通过设置策略来设置阻止创建 HasMany 规则引用的子资源的策略。原因是在 addX()
的“Has”一侧将此 false
策略设置为 HasMany
不仅会阻止从资源详细信息视图创建子资源,还会产生从页面视图创建子资源时出现权限错误,特别是策略禁止创建引用“父”或“有”的资源。当您考虑 addClassName()
的许可声明的范围之广时,实际上并不奇怪。
因此,我的解决方案最终不得不使用丑陋的 CSS。只是为什么这是对创建按钮进行页面相关隐藏的唯一方法。这应该是 HasMany::make("")->canCreate(false)
视图文件中的 Nova/*.php
声明。
无论如何,这里是 CSS,希望对某人有所帮助。
div[dusk="parent-class-detail-component"] div[dusk="has-many-child-class-index-component"] a[dusk='create-button'] {
display: none;
}