democracyapps / member-org
支持多种组织类型的应用程序,每种类型都有自己的用户和权限
Requires
- php: >=5.4.0
- illuminate/support: ~5.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-28 16:57:05 UTC
README
Laravel应用程序支持多种组织类型,每种类型都有自己的用户和多个权限级别。组织和组织成员提供一个接口,而EloquentMemberOrganization和EloquentOrganizationMember是当添加到Eloquent模型时提供完整实现的特质。
该包相当简单。当平台必须同时支持多种类型的组织和组织成员时,它非常有用。
重要:如果您正在考虑使用此包,请通过Twitter(@ejaxon)联系我。我正在考虑添加关于用户邀请、用户管理、迁移等功能。
使用说明
安装
首先通过Composer安装此包。
{ "require": { "democracyapps/member-org": "dev-master" } }
将服务提供者添加到app.php
// app/config/app.php 'providers' => [ '...', 'DemocracyApps\MemberOrg\MemberOrganizationServiceProvider', ];
(注意,如果需要发布配置文件以更改默认值,则当前需要服务提供者。
目前唯一的条件是用户类必须遵守Laravel的Authenticable契约。
请注意,EloquentOrganizationMember类只提供了OrganizationMember接口的存根(与EloquentMemberOrganization不同)。我正在等待更好地了解对它的需求(如果有)。
申请组织
假设您有一个Company类,您希望将其应用于此包,并且Company是Eloquent模型的子类
class Company extends Model { ... }
将类更改为实现Organization接口,并使用EloquentOrganization特质
use DemocracyApps\MemberOrg\EloquentMemberOrganization; use DemocracyApps\MemberOrg\Organization; class Company implements MemberOrganization { use EloquentMemberOrganization; ... }
此外,创建一个CompanyMember类(注意:名称中的'Member'部分是必需的。配置文件中的选项允许将其设置为其他内容。)
use DemocracyApps\MemberOrg\EloquentOrganizationMember; use DemocracyApps\MemberOrg\OrganizationMember; class CompanyMember implements OrganizationMember { use EloquentOrganizationMember; ... }
并为它创建一个迁移。它需要有三个列
user_id (foreign key referring to the 'id' column of your users table)
company_id (foreign key referring to the 'id' column of your companies table)
access (an integer)
任何列都不能为空。注意,第二列必须使用蛇形小写版本的组织类名,并在其后附加"_id"。
配置参数
有三个主要参数和一些辅助参数。如果您想更改默认值,请添加服务提供者,运行
php artisan vendor:publish
并编辑'config/member-org.php'。
max_permission_level (默认值:9)
权限很简单——每个组织成员被分配一个介于0和max_permission_level之间的访问级别。您的应用程序中的页面和资源可以分配所需的访问级别,访问级别低于所需级别的用户将无法通过userHasAccess测试。
我通常只分配两个级别,0表示无权限,9表示管理员,留出中间值供以后使用。
user_implements_superuser (默认值:false)
如果设置为true,则该包期望用户表中包含一个布尔列,如果为true,则该用户为“超级用户”,始终可以访问任何资源或页面。默认情况下,列名假定为'superuser',但可以在配置文件中更改。
user_implements_confirmation (默认值:false)
如果设置为true,则该包期望应用程序要求用户以某种方式验证其账户,并且他们应在完成验证之前不获得完全权限。他们的状态应在用户表中的一个布尔列中指示(默认情况下,列名假定为'confirmed',但可以在配置文件中更改)。
user_confirmation_required_threshold (默认值:0)指定他们在验证账户之前可能拥有的最大权限级别。因此,一个完整的管理员(访问级别=9)默认情况下将保留在访问级别0,直到完成验证。
基本用法
到目前为止,我以两种简单的方式使用这个包。首先,我使用组织的addMember方法来创建组织用户(这将在数据库中创建条目)。其次,我在路由中间件中使用组织的userHasAccess方法来限制对组织页面(通常是管理页面)的访问。
以下是一个公司管理页面中间件类的具体示例。在路由中,公司ID位于第2个路由段。
class VerifyCompanyAccess { /** * Check that user is logged in and allowed access to this page * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (\Auth::guest()) return redirect()->guest('/auth/login'); $id = $request->segment(2); $company = Company::find($id); if ($company == null) { return redirect('/'); } if (! $company->userHasAccess(\Auth::user(), 9)) { return redirect('/'); } return $next($request); } }
问题和计划
此模块正在被用于几个正在开发中的产品,并可能进一步发展。如果您发现错误或对功能有请求,请在这里创建一个问题,在Twitter上找到我(@ejaxon)或提交一个拉取请求。