democracyapps/member-org

支持多种组织类型的应用程序,每种类型都有自己的用户和权限

安装: 115

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 0

类型:package

v0.1.1 2015-03-18 22:39 UTC

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)或提交一个拉取请求。