帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Laravel  permission  MAN  auth  Author  BASE  基于角色   
Manage Policy and Control in your Laravel Apps

  • 源代码名称:laravel-governor
  • 源代码网址:http://www.github.com/GeneaLabs/laravel-governor
  • laravel-governor源代码文档
  • laravel-governor源代码下载
  • Git URL:
    git://www.github.com/GeneaLabs/laravel-governor.git
  • Git Clone代码到本地:
    git clone http://www.github.com/GeneaLabs/laravel-governor
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/GeneaLabs/laravel-governor
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • Join the chat at https://gitter.im/GeneaLabs/laravel-governorLatest StableVersionTotal DownloadsBuild Status代码Coverate报告

    Laravel的调控器

    使用基于角色角色的授权,在你的应用程序中管理授权。

    screencast 2017-06-04 at 3 34 56 pm

    目标

    提供一个简单的管理 Laravel 应用程序中的ACL的方法,该方法构建在 Laravel 授权功能之上。 通过利用 Laravel 授权功能本身,没有额外的学习或者实现曲线。 你需要知道的是 Laravel,你会知道如何使用 Laravel。

    要求

    • PHP> =7.1.3
    • Laravel> = 5.4
    • Bootstrap 3 ( 需要包含在布局文件中)
    • FontAwesome 4 ( 需要包含在布局文件中)

    安装

    主关键字最低的用户将被设置为超级作用域。 如果要开始一个新项目,请确保现在添加初始用户。 如果已经有用户,则可以更新角色用户条目以指向预期用户,如果第一个用户不是预期的超级用户。 现在让我们安装软件包。

    通过composer安装:

    composer require genealabs/laravel-governor

    仅适用于 LARVEL 5.4和更低的: 将服务提供程序添加到 app.php 配置 file:

    'providers'=> [// [...]GeneaLabsLaravelGovernorProvidersService::class,// [...]],

    实现

    首先,我们需要通过运行迁移和数据源来更新数据库:

    php artisan migrate
    php artisan db:seed --class=LaravelGovernorDatabaseSeeder

    如果你从一个空数据库开始,请立即运行你的资源源:

    php artisan db:seed

    接下来,分配权限( 这要求用户已经填充了):

    php artisan db:seed --class=LaravelGovernorPermissionsTableSeeder

    现在,我们需要使资产可用:

    php artisan governor:publish --assets

    最后,将可以治理特性添加到应用程序的用户模型中:

    // [...]useGeneaLabsLaravelGovernorTraitsGovernable;classUserextendsAuthenticatable{useGovernable;// [...]

    配置

    如果你需要将(。有关默认配置文件,请参阅下面的示例选择) 更改为默认配置,请发布配置 file:

    php artisan governor:publish --config

    做任何必要的改变。 ( 如果你不需要进行任何更改,则不建议发布配置文件。)

    视图

    如果你想自定义视图,请发布这些视图:

    php artisan governor:publish --views

    并编辑它们 resourcesviewsvendorgenealabslaravel-governor

    策略

    策略现在自动检测并自动添加到实体列表中。 你将不再需要手动管理实体。 编辑角色时,将为角色分配提供新策略。 请在下面的示例部分中查看示例策略。 有关如何创建策略并在代码中检查它们的详细信息,请参阅 Laravel 文档: https://laravel.com/docs/5.4/authorization#writing-policies

    要使用 Governor,你的策略必须 LaravelGovernorPolicy。 默认情况下不需要包含任何方法,因为它们是自动实现的,并且基于反射执行检查。 但是,如果需要定制任何内容,你可以覆盖任何 beforecreateeditviewinspectremove 方法。

    检查授权

    要根据给定的策略验证用户,请使用Governor验证的关键字之一: beforecreateeditviewinspectremove。 例如,如果要检查的策略有一个 NAME 类的BlogPostPolicy,那么你可以将它的授权给你的用户 $user->can('create', (new BlogPost)) 或者 $user->can('edit', $blogPost)

    表将自动更新为引用创建项的用户的governor_created_by 列。 不再需要运行单独的迁移或者围绕具有模型的包( 没有created_by属性) 运行。

    管理视图

    集成 Laravel 到应用程序的最简单方法是将菜单项添加到应用程序( 确保使用 Laravel 授权方法适当地限制访问) 菜单的相关部分。 可以添加以下路由:

    • 角色管理: genealabs.laravel-governor.roles.index
    • 用户角色分配: genealabs.laravel-governor.assignments.index

    例如:

    <li><ahref="{{ route('genealabs.laravel-governor.roles.index') }}">Governor</a></li>

    403未授权

    建议用户自定义 403错误页,以便用户知道他们没有访问权限。 否则,用户将看到默认错误消息。 有关如何设置这些内容的详细信息,请参阅 https://laravel.com/docs/5.4/errors#custom-http-error-pages

    示例

    配置文件

    <?phpreturn [/* |-------------------------------------------------------------------------- | Layout Blade File |-------------------------------------------------------------------------- | | This value is used to reference your main layout blade view to render | the views provided by this package. The layout view referenced here | should include Bootstrap 3 and FontAwesome 4 to work as intended.*/'layout-view'=>'layouts.app',/* |-------------------------------------------------------------------------- | Layout Content Section Name |-------------------------------------------------------------------------- | | Specify the name of the section in the view referenced 上面 that is | used to render the main page content. If this does not match, you | will only get blank pages when accessing views in Governor.*/'content-section'=>'content',/* |-------------------------------------------------------------------------- | Authorization Model |-------------------------------------------------------------------------- | | Here you can customize what model should be used for authorization checks | in the event that you have customized your authentication processes.*/'auth-model'=> config('auth.providers.users.model')?? config('auth.model'),/* |-------------------------------------------------------------------------- | User Model Name Property |-------------------------------------------------------------------------- | | This value is used to display your users when assigning them to roles. | You can choose any property of your auth-model defined 上面 that is | exposed via JSON.*/'user-name-property'=>'name',/* |-------------------------------------------------------------------------- | URL Prefix |-------------------------------------------------------------------------- | | If you want to change the URL used by the browser to access the admin | pages, you can do so here. Be careful to avoid collisions with any | existing URLs of your app when doing so.*/'url-prefix'=>'/genealabs/laravel-governor/',];

    策略

    默认策略所需的方法

    添加策略是crazily简单 ! 所有的工作都被重构了,所以现在你需要担心的就是创建一个策略类,这就是它 !

    <?phpnamespaceGeneaLabsLaravelGovernorPolicies;useGeneaLabsLaravelGovernorInterfacesGovernablePolicy;useIlluminateAuthAccessHandlesAuthorization;classMyPolicyextendsLaravelGovernorPolicy{useHandlesAuthorization;}
    策略类中的默认方法

    只需要自定义给定的方法,就可以将任何 beforecreateeditviewinspectremove 方法添加到策略中。

    <?phpnamespaceAppPolicies;useAppMyModel;useAppUser;useGeneaLabsLaravelGovernorPoliciesLaravelGovernorPolicy;useIlluminateAuthAccessHandlesAuthorization;classMyModelPolicyextendsLaravelGovernorPolicy{useHandlesAuthorization;publicfunctionbefore(User$user) {return$user->isSuperAdmin? true : null; }publicfunctioncreate(User$user, MyModel$myModel) {return$this->validatePermissions($user, 'create', 'myModel', $myModel->governor_created_by); }publicfunctionedit(User$user, MyModel$myModel) {return$this->validatePermissions($user, 'edit', 'myModel', $myModel->governor_created_by); }publicfunctionview(User$user, MyModel$myModel) {return$this->validatePermissions($user, 'view', 'myModel', $myModel->governor_created_by); }publicfunctioninspect(User$user, MyModel$myModel) {return$this->validatePermissions($user, 'inspect', 'myModel', $myModel->governor_created_by); }publicfunctionremove(User$user, MyModel$myModel) {return$this->validatePermissions($user, 'remove', 'myModel', $myModel->governor_created_by); }}


    文章标签:BASE  MAN  auth  Laravel  Author  permission  基于角色   

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语