管理角色/权限的两个最佳Laravel包

角色和权限是许多web应用程序的重要组成部分。Laravel历史上为它们提供了很多包,并且改进了核心代码。那么今天这个市场的情况如何呢?什么包装最好用?我挑了两个。你为什么需要包裹? 让我们从头开始,Laravel有自己的管理权限的核心逻辑。它是在5.1.11版本中引入的,自那以后几乎没有变化。我们有这样的方法: Gates和Policiesauthorize()方法can和can和Blade命令。这是旧软件包被放弃的部分原因;核心功能取代了它们。 但是软件包仍然可以帮助管理权限和角色,这在核心中并不容易。有两个软件包做得非常好,并且得到了积极的维护: - \"实体\"(在所有表中)的能力分配对象。它可以是角色或用户。因此,与用户id或用户表没有直接关系;与Spatie的包相同。与上一个包不同的是,还有几个字段:能力.头衔, 能力。仅拥有,和角色.级别。它们添加了一些附加功能,但在自述文件中没有很好的解释。Spatiale有Bouncer中没有的guard字段。总之,Bouncer的数据库结构一开始似乎更复杂,更难理解,但随之而来更灵活一些。可用的方法提供了非常相似的功能,所以让我们来详细比较一下。创建角色/权限/能力在一句话中创造角色和能力,分配任务:1@auth2You are logged in.3@endauth。在幕后,保镖将为您创建一个角色模型和一个能力模型。但是您也可以使用正面:1@auth(\"admin\")2You are logged in through admin guard3@endauth,Bouncer在这里有更多的功能,可以自动创建\"幕后\"模型。为用户分配角色空间1@guest2Welcome Guest3@endauth角色也可以同步:ManagesFrequencies::twiceMonthly()BouncerRouteCollection::getRoutesByName()这两个包都可以接受单个角色或数组。但是Spatie的包在这里获胜是因为syncRoles的功能。它非常有用;对于Bouncer,您需要手动执行一些操作。将权限/能力分配给用户Spatie$expiresAtBouncerCallbackEvent::withoutOverlapping()您可以将模型名称作为第二个参数传递。--force类似的功能,但是Bouncer提供传递模型类或其实例的能力。检查用户的权限/角色这两个软件包非常相似,没有明确的赢家。Blade命令Spatie@auth@guestBouncerBouncer不添加自己的Blade指令。Spatie的软件包提供更多功能。当然,对于这两个包,您可以使用默认的Laravel命令,比如@can和@endcan。缓存,运行:Arr::pluck()Bouncer为当前请求缓存Bouncer执行的所有查询。如果启用交叉请求缓存,缓存将在不同的请求之间持久存在。无论何时需要,您都可以完全刷新bouncer的缓存:MessageBag或者,您可以仅为特定用户刷新缓存:Arrayable在bouncer中,缓存更健壮一些。启用/禁用缓存是一件好事,为特定用户刷新缓存可能会很方便。总体结论如果您仍然希望这里有一个明显的赢家,这是不会发生的。两个软件包都非常好,这是一个偏好问题。它们在某些功能上都有优势,但更多的是细节。Spatie的优点:更好的文档(一些Bouncer的方法在自述文件中没有提到)更易于理解的DB结构syncRoles()方法,而不是删除插入方式一些blade命令–@role和@hasanyrole能够使用多个保护程序的优点:创建角色/能力,并在一句话中分配所有的权限,允许或不允许基于模型或其实例的权限一个更好的缓存机制一个更健壮的数据库结构一个更有用的字段这些细节对你来说非常重要,这可能是你选择的原因。否则,选择Spatie或Bouncer,您应该不会失望。p.S.奖金礼物最后,这两个软件包都提供了一组管理角色和权限的功能,但没有任何UI或管理面板来管理它。我已经准备了一个基于这两个包的UI初学者工具包。您可以将其用作管理角色和权限的样板。这里有指向GitHub存储库的链接:基于Spatial Laravel权限的Laravel 5.4管理面板 - 字段保护名称有默认值web**-**包允许使用多个保护。 - 如您所见,有两个透视表用于权限,其中一个具有角色,还有一个是用户表。 - Fieldmodelu type有默认值AppUser所以用户表没有直接外键,没有其他表有用户id字段。 - 什么是Spatie调用的\"权限,\"Bouncer调用\"能力\"。\"然后\"权限\"表是一组附属于\"实体\" - 与上一个包不同的是,还有几个字段:能力.头衔, 能力。仅拥有,和角色.级别。它们添加了一些附加功能,但在自述文件中没有很好的解释。 - Spatiale有Bouncer中没有的guard字段。 - 更好的文档(一些Bouncer的方法在自述文件中没有提到) - 更易于理解的DB结构 - syncRoles()方法,而不是删除插入方式 - 一些blade命令–@role和@hasanyrole - 能够使用多个保护程序的优点:创建角色/能力,并在一句话中分配所有的权限,允许或不允许基于模型或其实例的权限一个更好的缓存机制一个更健壮的数据库结构一个更有用的字段这些细节对你来说非常重要,这可能是你选择的原因。否则,选择Spatie或Bouncer,您应该不会失望。p.S.奖金礼物最后,这两个软件包都提供了一组管理角色和权限的功能,但没有任何UI或管理面板来管理它。我已经准备了一个基于这两个包的UI初学者工具包。您可以将其用作管理角色和权限的样板。这里有指向GitHub存储库的链接:基于Spatial Laravel权限的Laravel 5.4管理面板 - 基于Spatial Laravel权限的Laravel 5.4管理面板

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1158

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1059

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this->id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:798

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this->id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:884

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:925

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:870

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:854

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:825

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1688

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1294