현재 Lock이 유지 관리되지 않고 있어 안타깝습니다. 현재로서는 지원을 제공하거나 새로운 기여를 받을 수 없습니다. 다른 우선순위로 인해 작업을 Lock에 제대로 적용하지 못하게 되었습니다. 결국 나는 다시 일을 시작하려고 노력할 것이지만 불행하게도 언제인지는 말할 수 없습니다. 모든 기여자와 사용자에게 감사드립니다.
-- 건조
Lock은 PHP 5.4+ 용 유연한 드라이버 기반 Acl 패키지입니다.
Dries Vints가 제작했습니다. BeatSwitch 덕분에 가능해졌습니다. Matthew Machuga의 권위에서 영감을 얻었습니다. Jerry Low의 로고.
Lock
: 주제에 대한 ACL 인스턴스입니다. 이 패키지는 현재 CallerLock
및 RoleLock
과 함께 제공됩니다.Caller
): 어떤 작업을 수행할 수 있는 권한을 가질 수 있는 ID 개체Driver
: 정적이거나 영구적일 수 있는 권한을 위한 스토리지 시스템Permission
: 권한에는 작업과 선택적(고유) 리소스가 포함됩니다. Restriction
또는 Privilege
일 수 있음Restriction
: 제한은 작업을 수행할 수 없도록 거부합니다(선택적 리소스에 대해).Privilege
: 권한을 통해 작업을 수행할 수 있습니다(선택적 리소스에 대해).Action
: 액션은 당신이 하도록 허용되거나 거부되는 어떤 것입니다.Resource
: 리소스는 하나 이상의 작업을 수행할 수 있는 개체일 수 있습니다. 고유 식별자로 특정 유형의 리소스 또는 특정 리소스를 타겟팅할 수 있습니다.Role
: 역할은 여러 권한을 보유할 수도 있습니다. 호출자는 여러 역할을 가질 수 있습니다. 역할은 다른 역할로부터 권한을 상속받을 수 있습니다. Lock은 여러 권한 호출자와 작업하고 권한을 저장하는 가장 유연한 방법을 제공한다는 점에서 다른 acl 패키지와 다릅니다.
Lock의 Caller
계약을 사용하면 여러 ID에 대한 권한을 설정할 수 있습니다.
Driver
계약을 사용하면 영구 또는 정적 스토리지 시스템에 대한 권한을 쉽게 저장할 수 있습니다. 기본 정적 ArrayDriver
이 패키지와 함께 제공됩니다. 이미 준비된 더 많은 드라이버를 보려면 아래 목록을 확인하세요. 또는 Driver
계약을 구현하여 직접 구축하세요.
리소스 유형 및 (선택 사항) 식별자를 수동으로 전달하여 리소스에 대한 권한을 설정하고 확인할 수 있습니다. 또는 개체에 Resource
계약을 구현하여 개체를 전달하여 보다 쉽게 잠글 수 있습니다.
Manager
사용하면 새 Lock
인스턴스를 쉽게 인스턴스화하고 작업 별칭을 설정하거나 역할을 등록할 수 있습니다.
프레임워크별 구현이 필요한 경우 아래에서 이미 준비된 드라이버 중 하나를 선택하세요.
Composer를 통해 이 패키지를 설치합니다.
$ composer require beatswitch/lock
어떤 작업을 수행할 권한이 있어야 하는 모든 ID는 BeatSwitchLockCallersCaller
계약을 구현해야 합니다. Caller
계약은 유형과 고유 식별자를 반환하도록 요구하여 호출자를 식별합니다. 아래 예를 살펴보겠습니다.
<?php
use BeatSwitch Lock Callers Caller ;
class User implements Caller
{
public function getCallerType ()
{
return ' users ' ;
}
public function getCallerId ()
{
return $ this -> id ;
}
public function getCallerRoles ()
{
return [ ' editor ' , ' publisher ' ];
}
}
getCallerType
함수를 추가하면 고유한 유형을 통해 호출자 그룹을 식별할 수 있습니다. 어느 시점에서 다른 호출자 그룹에 대한 권한을 설정하려는 경우 다른 개체에 대한 계약을 쉽게 구현할 수 있습니다.
<?php
use BeatSwitch Lock Callers Caller ;
class Organization implements Caller
{
public function getCallerType ()
{
return ' organizations ' ;
}
public function getCallerId ()
{
return $ this -> id ;
}
public function getCallerRoles ()
{
return [ ' enterprise ' ];
}
}
따라서 드라이버를 통해 특정 호출자 유형에 대한 권한을 쉽게 검색할 수 있습니다.
모든 권한을 미리 구성하려면 패키지와 함께 제공되는 정적 ArrayDriver
사용할 수 있습니다. 이를 통해 애플리케이션이 실행되기 전에 호출자에 대한 권한 목록을 설정할 수 있습니다.
use BeatSwitch Lock Drivers ArrayDriver ;
use BeatSwitch Lock Lock ;
use BeatSwitch Lock Manager ;
// Create a new Manager instance.
$ manager = new Manager ( new ArrayDriver ());
// Instantiate a new Lock instance for an object which implements the Caller contract.
$ lock = $ manager -> caller ( $ caller );
// Set some permissions.
$ lock -> allow ( ' manage_settings ' );
$ lock -> allow ( ' create ' , ' events ' );
// Use the Lock instance to validate permissions on the given caller.
$ lock -> can ( ' manage_settings ' ); // true: can manage settings
$ lock -> can ( ' create ' , ' events ' ); // true: can create events
$ lock -> cannot ( ' update ' , ' events ' ); // true: cannot update events
$ lock -> can ( ' delete ' , ' events ' ); // false: cannot delete events
영구 드라이버를 사용하면 영구 저장소 계층에 대한 권한을 저장하고 런타임 중에 조정할 수 있습니다. 예를 들어 Laravel 5 드라이버를 구현하는 경우 Laravel의 데이터베이스 구성 요소를 사용하여 데이터베이스에 대한 권한을 저장합니다. 자신만의 UI를 생성하면 이 패키지의 acl 기능을 쉽게 연결하여 다양한 사용자가 서로 다른 권한을 갖는 사용자 관리 시스템을 생성할 수 있습니다.
이것이 어떻게 수행되는지 알아보기 위해 매우 기본적인 사용자 관리 컨트롤러를 살펴보겠습니다. Laravel DB 드라이버를 사용하여 부트스트랩된 잠금 관리자 인스턴스를 얻는다고 가정하겠습니다.
<?php
use BeatSwitch Lock Manager ;
class UserManagementController extends BaseController
{
protected $ lockManager ;
public function __construct ( Manager $ lockManager )
{
$ this -> lockManager = $ lockManager ;
}
public function togglePermission ()
{
$ userId = Input:: get ( ' user ' );
$ action = Input:: get ( ' action ' );
$ resource = Input:: get ( ' resource ' );
$ user = User:: find ( $ userId );
$ this -> lockManager -> caller ( $ user )-> toggle ( $ action , $ resource );
return Redirect:: route ( ' user_management ' );
}
}
togglePermission
메소드를 사용할 때마다 해당 작업 및 리소스 유형에 대한 사용자 권한이 전환됩니다.
발신자의 작업을 allow
deny
할 수 있습니다. 권한을 설정하고 확인하는 몇 가지 방법은 다음과 같습니다.
호출자가 모든 것을 생성하도록 허용합니다.
$ lock -> allow ( ' create ' );
$ lock -> can ( ' create ' ); // true
발신자가 게시물만 작성할 수 있도록 허용합니다.
$ lock -> allow ( ' create ' , ' posts ' );
$ lock -> can ( ' create ' ); // false
$ lock -> can ( ' create ' , ' posts ' ); // true
발신자가 ID가 5인 특정 게시물만 편집할 수 있도록 허용합니다.
$ lock -> allow ( ' edit ' , ' posts ' , 5 );
$ lock -> can ( ' edit ' ); // false
$ lock -> can ( ' edit ' , ' posts ' ); // false
$ lock -> can ( ' edit ' , ' posts ' , 5 ); // true
발신자가 모든 게시물을 편집할 수 있도록 허용하지만 ID가 5인 게시물을 편집하는 것은 거부합니다.
$ lock -> allow ( ' edit ' , ' posts ' );
$ lock -> deny ( ' edit ' , ' posts ' , 5 );
$ lock -> can ( ' edit ' , ' posts ' ); // true
$ lock -> can ( ' edit ' , ' posts ' , 5 ); // false
권한 값을 전환합니다.
$ lock -> allow ( ' create ' );
$ lock -> can ( ' create ' ); // true
$ lock -> toggle ( ' create ' );
$ lock -> can ( ' create ' ); // false
여러 작업을 한 번에 허용하거나 거부할 수 있으며 여러 작업을 한 번에 확인할 수도 있습니다.
$ lock -> allow ([ ' create ' , ' edit ' ], ' posts ' );
$ lock -> can ( ' create ' , ' posts ' ); // true
$ lock -> can ([ ' create ' , ' edit ' ], ' posts ' ); // true
$ lock -> can ([ ' create ' , ' delete ' ], ' posts ' ); // false
특정 작업 및 리소스 조합에 대한 권한을 쉽게 지울 수 있습니다.
$ lock -> allow ([ ' create ' , ' edit ' ], ' posts ' );
$ lock -> clear ( ' edit ' , ' posts ' );
$ lock -> can ( ' edit ' , ' posts ' ); // false
$ lock -> can ( ' create ' , ' posts ' ); // true
잠금 인스턴스에 대한 모든 권한을 지울 수도 있습니다.
$ lock -> allow ( ' manage-posts ' );
$ lock -> allow ([ ' create ' , ' edit ' ], ' users ' );
$ lock -> clear ();
$ lock -> can ( ' manage-posts ' ); // false
$ lock -> can ( ' create ' , ' users ' ); // false
여러 작업을 그룹화하고 한 번에 모두 설정하려면 작업 별칭을 설정하는 것이 좋습니다.
$ lock -> alias ( ' manage ' , [ ' create ' , ' read ' , ' delete ' ]);
$ lock -> allow ( ' manage ' , ' posts ' );
$ lock -> can ( ' manage ' , ' posts ' ); // true
$ lock -> can ( ' create ' , ' posts ' ); // true
$ lock -> can ( ' delete ' , ' posts ' , 1 ); // true
$ lock -> can ( ' update ' , ' posts ' ); // false
잠금 인스턴스에 대한 작업으로 all
와일드카드를 전달하면 모든 것에 대한 모든 권한을 갖는 호출자를 쉽게 설정할 수 있습니다.
$ lock -> allow ( ' all ' );
이제 모든 "can" 메소드 호출은 이 호출자에 대해 true로 검증됩니다.
잠금은 역할 작업을 위한 쉬운 방법을 제공합니다. 기본적으로 역할을 사용하여 작업할 수 있지만 상속을 사용하려면 관리자 인스턴스에 역할을 등록해야 합니다.
$ manager -> setRole ( ' guest ' );
$ manager -> setRole ( ' user ' , ' guest ' ); // "user" will inherit all permissions from "guest"
또는 한 번에 여러 역할을 등록할 수 있습니다.
$ manager -> setRole ([ ' editor ' , ' admin ' ], ' user ' ); // "editor" and "admin" will inherit all permissions from "user".
일부 권한을 설정하고 어떻게 해결되는지 살펴보겠습니다.
// Allow a guest to read everything.
$ manager -> role ( ' guest ' )-> allow ( ' guest ' , ' read ' );
// Allow a user to create posts.
$ manager -> role ( ' user ' )-> allow ( ' create ' , ' posts ' );
// Allow an editor and admin to publish posts.
$ manager -> role ( ' editor ' )-> allow ( ' publish ' , ' posts ' );
$ manager -> role ( ' admin ' )-> allow ( ' publish ' , ' posts ' );
// Allow an admin to delete posts.
$ manager -> role ( ' admin ' )-> allow ( ' delete ' , ' posts ' );
// Let's assume our caller has the role of "editor" and check some permissions.
$ lock = $ manager -> caller ( $ caller );
$ lock -> can ( ' read ' ); // true
$ lock -> can ( ' delete ' , ' posts ' ); // false
$ lock -> can ( ' publish ' ); // false: we can't publish everything, just posts.
$ lock -> can ([ ' create ' , ' publish ' ], ' posts ' ); // true
알아야 할 점은 호출자 수준 권한이 역할 수준 권한보다 우선한다는 것입니다. 그것이 어떻게 작동하는지 봅시다.
호출자는 사용자 역할을 갖게 됩니다.
$ manager -> caller ( $ caller )-> allow ( ' create ' , ' posts ' );
// Notice that we don't need to set the role in the
// manager first if we don't care about inheritance.
$ manager -> role ( ' user ' )-> deny ( ' user ' , ' create ' , ' posts ' );
$ manager -> caller ( $ caller )-> can ( ' create ' , ' posts ' ); // true: the user has explicit permission to create posts.
조건은 실제로 권한에 대해 설정할 수 있는 추가 검사인 어설션입니다. allow
및 deny
의 마지막 매개변수로 배열을 전달할 수 있습니다. 모든 조건은 BeatSwitchLockPermissionsCondition
인터페이스를 구현해야 합니다.
경고: 현재 조건은 정적 드라이버에서만 작동합니다.
조건을 설정해보자.
<?php
use BeatSwitch Lock Lock ;
use BeatSwitch Lock Permissions Condition ;
use BeatSwitch Lock Permissions Permission ;
use BeatSwitch Lock Resources Resource ;
use Illuminate Auth AuthManager ;
class LoggedInCondition implements Condition
{
/**
* The Laravel AuthManager instance
*
* @var IlluminateAuthAuthManager
*/
protected $ auth ;
/**
* @param IlluminateAuthAuthManager $auth
*/
public function __construct ( AuthManager $ auth )
{
$ this -> auth = $ auth ;
}
/**
* Assert if the condition is correct
*
* @param BeatSwitchLockLock $lock The current Lock instance that's being used
* @param BeatSwitchLockPermissionsPermission $permission The Permission that's being checked
* @param string $action The action passed to the can or cannot method
* @param BeatSwitchLockResourcesResource|null $resource The resource passed to the can or cannot method
* @return bool
*/
public function assert ( Lock $ lock , Permission $ permission , $ action , Resource $ resource = null )
{
// Condition will succeed if the user is logged in.
return $ this -> auth -> check ();
}
}
이제 권한을 설정할 때 이것이 어떻게 작동하는지 살펴보겠습니다.
$ condition = App:: make ( ' LoggedInCondition ' );
$ lock -> allow ( ' create ' , ' posts ' , null , $ condition );
$ lock -> can ( ' create ' , ' posts ' ); // true if logged in, otherwise false.
여러 조건을 전달할 수도 있습니다.
$ lock -> allow ( ' create ' , ' posts ' , null , [ $ falseCondition , $ trueCondition ]);
$ lock -> can ( ' create ' , ' posts ' ); // false: there's at least one false condition
원하는 만큼 많은 조건을 전달할 수 있지만 권한이 작동하려면 모두 성공해야 합니다.
원하는 경우 콜백을 사용할 수도 있습니다.
$ lock -> allow ( ' create ' , ' posts ' , null , function ( $ lock , $ permission , $ action , $ resource = null ) {
return false ;
});
$ lock -> can ( ' create ' , ' posts ' ); // false because the callback returns false.
특정 작업을 수행하는 것이 허용되거나 거부되는 리소스 목록을 검색하려면 Lock
인스턴스에서 allowed
및 denied
메서드를 사용할 수 있습니다.
$ lock -> allow ( ' update ' , ' users ' , 1 );
$ lock -> allow ( ' update ' , ' users ' , 2 );
$ lock -> allow ( ' update ' , ' users ' , 3 );
$ lock -> deny ( ' update ' , ' users ' , 2 );
$ lock -> allowed ( ' update ' , ' users ' ); // Returns [1, 3];
$ lock -> denied ( ' update ' , ' users ' ); // Returns [2];
권한이 설정된 리소스에서만 ID를 검색할 수 있다는 점을 명심하세요. Lock을 통해 등록되지 않은 리소스는 반환되지 않습니다.
BeatSwitchLockLockAware
특성을 구현하여 호출자나 역할에 ACL 기능을 쉽게 추가할 수 있습니다.
<?php
use BeatSwitch Lock Callers Caller ;
use BeatSwitch Lock LockAware ;
class Organization implements Caller
{
use LockAware;
public function getCallerType ()
{
return ' organizations ' ;
}
public function getCallerId ()
{
return $ this -> id ;
}
public function getCallerRoles ()
{
return [ ' enterprise ' ];
}
}
이제 잠금 인스턴스를 설정해야 합니다.
$ caller -> setLock ( $ lock );
이제 호출자는 모든 잠금 방법을 자체적으로 사용할 수 있습니다.
$ caller -> can ( ' create ' , ' posts ' );
$ caller -> allow ( ' edit ' , ' pages ' );
LockAware
특성을 구현하는 호출자가 있지만 아직 호출자의 잠금 인스턴스를 부트스트랩하지 않은 경우 관리자의 makeCallerLockAware
메소드를 사용하여 호출자가 잠금을 인식하도록 쉽게 만들 수 있습니다.
$ caller = $ manager -> makeCallerLockAware ( $ caller );
이제 호출자는 LockAware
메서드를 사용할 수 있습니다. 역할에도 비슷한 방법이 있습니다.
$ role = $ manager -> makeRoleLockAware ( ' guest ' );
이는 이미 LockAware
특성과 함께 제공되는 SimpleRole
개체를 부트스트랩합니다.
다음 메서드는 모두 BeatSwitchLockLock
인스턴스에서 호출할 수 있습니다.
현재 호출자에게 어떤 작업을 수행할 수 있는 권한이 있는지 확인합니다.
can(
string|array $action,
string|BeatSwitchLockResourcesResource $resource = null,
int $resourceId = null
)
현재 호출자가 어떤 작업을 수행하는 것이 금지되어 있는지 확인합니다.
cannot(
string|array $action,
string|BeatSwitchLockResourcesResource $resource = null,
int $resourceId = null
)
호출자에게 특정 작업을 수행할 수 있도록 Privilege
권한을 설정합니다. 일치하는 제한사항을 제거합니다.
allow(
string|array $action,
string|BeatSwitchLockResourcesResource $resource = null,
int $resourceId = null,
BeatSwitchLockPermissionsCondition[] $conditions = []
)
발신자가 어떤 작업을 수행하지 못하도록 Restriction
권한을 설정합니다. 일치하는 권한을 제거합니다.
deny(
string|array $action,
string|BeatSwitchLockResourcesResource $resource = null,
int $resourceId = null,
BeatSwitchLockPermissionsCondition[] $conditions = []
)
지정된 권한의 값을 전환합니다.
toggle(
string|array $action,
string|BeatSwitchLockResourcesResource $resource = null,
int $resourceId = null
)
주체가 주어진 작업을 수행할 수 있는 주어진 리소스 유형의 배열에 있는 모든 ID를 반환합니다.
allowed(
string|array $action,
string|BeatSwitchLockResourcesResource $resourceType
)
주체가 주어진 작업을 수행하는 것이 거부된 주어진 리소스 유형의 배열에 있는 모든 ID를 반환합니다.
denied(
string|array $action,
string|BeatSwitchLockResourcesResource $resourceType
)
다음 메서드는 모두 BeatSwitchLockManager
인스턴스에서 호출할 수 있습니다.
호출자에 대한 BeatSwitchLockLock
인스턴스를 반환합니다.
caller(
BeatSwitchLockCallersCaller $caller
)
역할에 대한 BeatSwitchLockLock
인스턴스를 반환합니다.
role(
BeatSwitchLockRolesRole $role
)
하나 이상의 작업에 대한 별칭을 추가합니다.
alias(
string $name,
string|array $actions
)
권한을 상속받을 하나 이상의 역할과 선택적 역할을 설정합니다.
setRole(
string|array $name,
string $inherit = null
)
LockAware
특성을 구현하는 호출자에 대한 잠금 인스턴스를 설정합니다. 잠금 인스턴스가 설정된 호출자를 반환합니다.
makeCallerLockAware(
BeatSwitchLockCallersCaller $caller
)
LockAware
특성을 구현하는 역할에 대한 잠금 인스턴스를 설정합니다. 잠금 인스턴스가 설정된 역할을 반환합니다.
makeRoleLockAware(
BeatSwitchLockRolesRole|string $role
)
BeatSwitchLockDriversDriver
계약을 구현하여 드라이버를 쉽게 빌드할 수 있습니다. 아래에서는 Laravel의 Eloquent ORM을 저장 메커니즘으로 사용하여 자체 영구 드라이버를 만드는 방법을 보여줍니다.
최소한 다음 데이터베이스 열을 포함하는 CallerPermission
모델 클래스가 있다고 가정합니다.
caller_type
(varchar, 100)caller_id
(정수, 11)type
(varchar, 10)action
(varchar, 100)resource_type
(varchar, 100, null 허용)resource_id
(int, 11, nullable) 그리고 다음과 같은 데이터베이스 열이 있는 RolePermission
모델이 있습니다.
role
(varchar, 100)type
(varchar, 10)action
(varchar, 100)resource_type
(varchar, 100, null 허용)resource_id
(int, 11, nullable) 아래에서 드라이버의 전체 구현을 확인해 보겠습니다. getCallerPermissions
메소드의 경우 PermissionFactory
클래스를 사용하여 데이터를 쉽게 매핑하고 이로부터 Permission
객체를 생성합니다. PermissionFactory
의 createFromData
메소드는 배열과 객체를 모두 허용합니다.
<?php
use BeatSwitch Lock Callers Caller ;
use BeatSwitch Lock Drivers Driver ;
use BeatSwitch Lock Permissions Permission ;
use BeatSwitch Lock Permissions PermissionFactory ;
use BeatSwitch Lock Roles Role ;
use CallerPermission ;
use RolePermission ;
class EloquentDriver implements Driver
{
/**
* Returns all the permissions for a caller
*
* @param BeatSwitchLockCallersCaller $caller
* @return BeatSwitchLockPermissionsPermission[]
*/
public function getCallerPermissions ( Caller $ caller )
{
$ permissions = CallerPermission:: where ( ' caller_type ' , $ caller -> getCallerType ())
-> where ( ' caller_id ' , $ caller -> getCallerId ())
-> get ();
return PermissionFactory:: createFromData ( $ permissions -> toArray ());
}
/**
* Stores a new permission into the driver for a caller
*
* @param BeatSwitchLockCallersCaller $caller
* @param BeatSwitchLockPermissionsPermission
* @return void
*/
public function storeCallerPermission ( Caller $ caller , Permission $ permission )
{
$ eloquentPermission = new CallerPermission ;
$ eloquentPermission -> caller_type = $ caller -> getCallerType ();
$ eloquentPermission -> caller_id = $ caller -> getCallerId ();
$ eloquentPermission -> type = $ permission -> getType ();
$ eloquentPermission -> action = $ permission -> getAction ();
$ eloquentPermission -> resource_type = $ permission -> getResourceType ();
$ eloquentPermission -> resource_id = $ permission -> getResourceId ();
$ eloquentPermission -> save ();
}
/**
* Removes a permission from the driver for a caller
*
* @param BeatSwitchLockCallersCaller $caller
* @param BeatSwitchLockPermissionsPermission
* @return void
*/
public function removeCallerPermission ( Caller $ caller , Permission $ permission )
{
CallerPermission:: where ( ' caller_type ' , $ caller -> getCallerType ())
-> where ( ' caller_id ' , $ caller -> getCallerId ())
-> where ( ' type ' , $ permission -> getType ())
-> where ( ' action ' , $ permission -> getAction ())
-> where ( ' resource_type ' , $ permission -> getResourceType ())
-> where ( ' resource_id ' , $ permission -> getResourceId ())
-> delete ();
}
/**
* Checks if a permission is stored for a user
*
* @param BeatSwitchLockCallersCaller $caller
* @param BeatSwitchLockPermissionsPermission
* @return bool
*/
public function hasCallerPermission ( Caller $ caller , Permission $ permission )
{
return ( bool ) CallerPermission:: where ( ' caller_type ' , $ caller -> getCallerType ())
-> where ( ' caller_id ' , $ caller -> getCallerId ())
-> where ( ' type ' , $ permission -> getType ())
-> where ( ' action ' , $ permission -> getAction ())
-> where ( ' resource_type ' , $ permission -> getResourceType ())
-> where ( ' resource_id ' , $ permission -> getResourceId ())
-> first ();
}
/**
* Returns all the permissions for a role
*
* @param BeatSwitchLockRolesRole $role
* @return BeatSwitchLockPermissionsPermission[]
*/
public function getRolePermissions ( Role $ role )
{
$ permissions = RolePermission:: where ( ' role ' , $ role -> getRoleName ())-> get ();
return PermissionFactory:: createFromData ( $ permissions -> toArray ());
}
/**
* Stores a new permission for a role
*
* @param BeatSwitchLockRolesRole $role
* @param BeatSwitchLockPermissionsPermission
* @return void
*/
public function storeRolePermission ( Role $ role , Permission $ permission )
{
$ eloquentPermission = new RolePermission ;
$ eloquentPermission -> role = $ role -> getRoleName ();
$ eloquentPermission -> type = $ permission -> getType ();
$ eloquentPermission -> action = $ permission -> getAction ();
$ eloquentPermission -> resource_type = $ permission -> getResourceType ();
$ eloquentPermission -> resource_id = $ permission -> getResourceId ();
$ eloquentPermission -> save ();
}
/**
* Removes a permission for a role
*
* @param BeatSwitchLockRolesRole $role
* @param BeatSwitchLockPermissionsPermission
* @return void
*/
public function removeRolePermission ( Role $ role , Permission $ permission )
{
RolePermission:: where ( ' role ' , $ role -> getRoleName ())
-> where ( ' type ' , $ permission -> getType ())
-> where ( ' action ' , $ permission -> getAction ())
-> where ( ' resource_type ' , $ permission -> getResourceType ())
-> where ( ' resource_id ' , $ permission -> getResourceId ())
-> delete ();
}
/**
* Checks if a permission is stored for a role
*
* @param BeatSwitchLockRolesRole $role
* @param BeatSwitchLockPermissionsPermission
* @return bool
*/
public function hasRolePermission ( Role $ role , Permission $ permission )
{
return ( bool ) RolePermission:: where ( ' role ' , $ role -> getRoleName ())
-> where ( ' type ' , $ permission -> getType ())
-> where ( ' action ' , $ permission -> getAction ())
-> where ( ' resource_type ' , $ permission -> getResourceType ())
-> where ( ' resource_id ' , $ permission -> getResourceId ())
-> first ();
}
}
권한을 저장하려고 할 때 권한이 이미 존재하는지 확인하지 않는다는 점에 유의하세요. Lock
인스턴스에서 모든 작업이 완료되었으므로 걱정할 필요가 없습니다.
이제 호출자와 역할에 대한 권한 저장을 지원하는 드라이버가 있습니다.
드라이버가 예상대로 작동하는지 확인하는 것은 매우 쉽습니다. 영구 드라이버를 구축하는 경우 PersistentDriverTestCase
클래스를 확장하는 PHPUnit 테스트를 생성하여 쉽게 테스트할 수 있습니다.
<?php
use BeatSwitch Lock Tests PersistentDriverTestCase ;
class EloquentDriverTest extends PersistentDriverTestCase
{
public function setUp ()
{
// Don't forget to reset your DB here.
// Bootstrap your driver.
$ this -> driver = new EloquentDriver ();
parent :: setUp ();
}
}
그리고 이것이 당신에게 필요한 전부입니다! PersistentDriverTestCase
에는 드라이버가 예상대로 작동하는지 확인하는 데 필요한 모든 테스트가 포함되어 있습니다. 따라서 모든 테스트가 통과되면 드라이버가 올바르게 설정된 것입니다. 아무것도 조롱할 필요가 없습니다. 이는 순수한 통합 테스트 사례입니다. 물론 위의 특정 예에서 Eloquent가 작동하려면 Laravel을 부트스트랩해야 합니다. sqlite와 같은 데이터베이스로 작업하는 것이 드라이버를 테스트하는 가장 좋은 방법입니다.
현재 잠금이 유지 관리되지 않습니다.
이 패키지는 현재 Dries Vints에서 관리하고 있습니다.
궁금한 점이 있으면 주저하지 말고 이슈에 문의하세요.
자세한 내용은 기여 파일을 참조하세요.
변경 로그 파일에서 각 릴리스의 변경 사항 목록을 볼 수 있습니다.
MIT 라이센스. 자세한 내용은 라이센스 파일을 참조하십시오.