orottier/authorization-required
Composer 安装命令:
composer require orottier/authorization-required
包简介
A simple and efficient authorization manager for the Laravel framework
README 文档
README
A simple and efficient authorization package for the Laravel framework
What this package can and cannot do
This packages uses the available Eloquent hooks to impose rules for reading and writing your Models. No more, no less.
Will protect:
- Read access & creation of new models
- Updates and deletes of models, invoked on the model itself
Will not protect:
- Raw queries:
DB::table('users')->delete() - Mass updates and deletes:
User::where('role', 'admin')->delete()
Please note the fundamental difference between
✅ User::find(12)->delete(); // Invokes delete on the User Model
❌ User::where('id', 12)->delete() // Invokes delete on the Eloquent Builder
❌ DB::table('users')->where('id', 12)->delete() // Invokes delete on the Query Builder
❌ DB::delete("DELETE FROM `users` WHERE `id` = 12") // Executes a raw query
This package will only protect guard deletes/updates of the first type. The latter three will pass no matter what rules you impose.
Installation via Composer
Note: this package can only be used in combination with the Laravel framework.
Use composer to use AuthorizationRequired in your project
composer require orottier/authorization-required
# (use version `1.*` for Laravel `5.2` and lower)
# (use version `2.*` for Laravel `5.3` and above)
How it works
The Laravel models you want to protect should include the AuthorizationRequired trait and should have an authorization policy defined for create, update and delete actions.
The following method is placed on your model:
public static function authorizationReadScope(\Illuminate\Database\Eloquent\Builder $query);
Use this query scope to limit the read access of your model. Together with the authorization policy, the rules of reading, updating, creating and deleting the model are defined.
Read behaviour
Calling Model::find will simply yield null if the the rules prevent the object to be seen (as if it did not exist). Your application has probably been configured to return a 404 status code in these cases.
Write behaviour (update, create, delete)
If your policy rules forbid writing the model, an AuthorizationRequired\PermissionException is thrown. Specifically: UpdatePermissionException, CreatePermissionException and DeletePermissionException. Your application can convert this into a nice 403 page using the render function in App\Exception.
Note that by Laravel's defaults, a missing rule will not allow any operations. Also, there must be a logged in user for any of the policies to be accepted.
Example usage
To illustrate the usage of this package, we will put authorization rules on a simple application that allows users to post and modify blog items (referred to as Post).
To put authorization rules on an Eloquent model, include the AuthorizationRequired trait:
<?php // ... use AuthorizationRequired\AuthorizationRequired; class Post extends Model { use AuthorizationRequired; // ... }
By default, all read and write access is denied for posts now. Your application will look very empty. We should allow users to view posts that are visible and published. Of course a user should be able to see, edit and delete all of his own posts, even the hidden ones.
Allow reading
Read access rules are written as a query scope. By defining the function authorizationReadScope we will override the default 'deny all' behaviour:
<?php // ... use AuthorizationRequired\AuthorizationRequired; use Illuminate\Database\Eloquent\Builder; class Post extends Model { use AuthorizationRequired; public static function authorizationReadScope(Builder $query) { if (Auth::check() && Auth::user()->isSuperAdmin()) { return $query; } $userId = Auth::check() ? Auth::user()->id : null; return $query->where('published_at', '<=', date('Y-m-d H:i:s')) ->where('hidden', false) ->orWhere('user_id', $userId); } // ... }
If you wish to impose no restrictions on read access, simply pass the query unaltered:
public static function authorizationReadScope(Builder $query) { return $query; }
Allow editing
Update/Create/Delete rules should be defined as an authorization policy.
<?php namespace App\Policies; use App\User; use App\Post; class PostPolicy { public function update(User $user, Post $post) { return Auth::check() && ($post->user_id === $user->id || $user->isSuperAdmin()); }
All users can create a post:
public function create(User $user) { return true; }
We will set the rules for deleting a post equal to the rules for editing the post:
public function delete(User $user, Post $post) { return $this->update($user, $post) }
That's it!
orottier/authorization-required 适用场景与选型建议
orottier/authorization-required 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.06k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2015 年 08 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 orottier/authorization-required 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 orottier/authorization-required 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 1.06k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-08-23