1. Go to this page and download the library: Download deefour/authorizer library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
deefour / authorizer example snippets
class ArticlePolicy
{
protected $user;
protected $record;
public function __construct($user, $record)
{
$this->user = $user;
$this->record = $record;
}
public function create()
{
return $this->user->exists;
}
public function edit()
{
return $this->record->exists && $this->record->author->is($user);
}
}
(new ArticlePolicy($user, new Article))->create(); // => true
(new ArticlePolicy($user, Article::class))->create(); // => true
(new ArticlePolicy($user, new Article))->edit(); // => false
(new ArticlePolicy($user, $user->articles->first()))->edit(); // => true
class ArticlePolicy
{
public function permittedAttributes()
{
$attributes = [ 'title', 'body', ];
// prevent the author and slug from being modified after the article
// has been persisted to the database.
if ( ! $this->record->exists) {
return array_merge($attributes, [ 'user_id', 'slug', ]);
}
return $attributes;
}
}
class ArticlePolicy
{
public function permittedAttributesForCreate()
{
return [ 'title', 'body', 'user_id', 'slug ];
}
public functoin permittedAttributesForEdit()
{
return [ 'title', 'body' ];
}
}
class ArticleScope
{
protected $user;
protected $scope;
public __construct($user, $scope)
{
$this->user = $user;
$this->scope = $scope;
}
public function resolve()
{
if ($this->user->isAdmin()) {
return $this->scope->all();
}
return $this->scope->where('published', true)->get();
}
}
$user = User::first();
$query = Article::newQuery();
(new ArticleScope($user, $query))->resolve(); //=> iterable list of Article objects
(new Authorizer)->policy(new User, Article::class); //=> ArticlePolicy
class Article
{
static public function policyClass()
{
return \Policies\ArticlePolicy::class;
}
}
(new Authorizer)->scope(new User, new Article); //=> a scoped resultset
class Article
{
static public function scopeClass()
{
return \Policies\ArticleScope::class;
}
}
(new Authorizer)->scope(new User, Article::where('promoted', true)); //=> ArticleScope
(new Authorizer)->scope(
new User,
Article::where('promoted', true),
function ($scope) {
return $scope->getModel();
}
); //=> a scoped resultset
(new Authorizer)->policyOrFail(new User, new Blog); //=> throws Deefour\Authorizer\Exception\NotDefinedException
(new Authorizer)->policyOrFail(new User, new Article, 'edit'); //=> throws Deefour\Authorizer\Exception\NotAuthorizedException
class ArticlePolicy
{
public function edit()
{
if ($this->record->user->is($this->user)) {
return true;
}
return 'You are not the owner of this article.';
}
}
try {
(new Authorizer)->authorize(new User, new Article, 'edit');
} catch (NotAuthorizedException $e) {
echo $e->getMessage(); //=> 'You are not the owner of this article.'
}
(new Authorizer)->permittedAttributes(new User, new Article); //=> ArticlePolicy::permittedAttributes()
(new Authorizer)->permittedAttributes(new User, new Article, 'store'); //=> ArticlePolicy::permittedAttributesForStore()
abstract class Policy
{
public function __construct($user, $record)
{
if (is_null($user) or ! $user->exists) {
throw new NotAuthorizedException($record, $this, 'initalization', 'You must be logged in!');
}
parent::__construct($user, $record);
}
}
public function edit(Article $article)
{
$this->authorize($article); //=> NotAuthorizedException will be thrown on failure
echo "You can edit this article!"
}
$this->authorize($article, 'modify');
public function update(Article $article)
{
$article->forceFill($this->permittedAttributes(new Article))->save();
}
use App\User;
use Auth;
use Deefour\Authorizer\ProvidesAuthorization;
use Illuminate\Routing\Controller as BaseController;
use Request;
use Route;
class Controller extends BaseController
{
use ProvidesAuthorization;
protected function authorizerAction()
{
$action = Route::getCurrentRoute()->getActionName();
return substr($action, strpos($action, '@') + 1);
}
protected function authorizerUser()
{
return Auth::user() ?: new User;
}
protected function authorizerAttributes()
{
return Request::all();
}
}
protected function prepareException(Exception $e)
{
if ($e instanceof NotAuthorizedException) {
return new HttpException(403, $e->getMessage());
}
return parent::prepareException($e);
}
public function __construct()
{
$this->middleware(function ($request, $next) {
$response = $next($request);
$this->verifyAuthorized();
return $response;
});
}
namespace App\Http\Requests;
use Deefour\Authorizer\ProvidesAuthorization;
use Illuminate\Foundation\Http\FormRequest;
class CreateArticleRequest extends FormRequest
{
use ProvidesAuthorization;
public function authorize()
{
return $this->authorize(new Article);
}
public function rules()
{
$rules = [
'title' => 'this->has('id') ? 'create' : 'edit';
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.