Model ownership for the Laravel PHP Framework
v1.0.0
, (*1)
This is a small trait that allows you to determine whether the using model owns some other model within your application. Using the trait makes it trivial to perform authorisation checks to determine whether some user has access to another model, for example., (*2)
Installation
This trait is installed via Composer. To install, simply add it to your composer.json
file:, (*3)
{
"require": {
"iatstuti/laravel-owns-models": "~1.0"
}
}
Then run composer to update your dependencies:, (*4)
$ composer update
In order to use this trait, import it in your Eloquent model. You can then use either the owns
or doesntOwn
method to determine if some model owns another, based on either the default or explicit keys for each., (*5)
<?php
use Iatstuti\Database\Support\OwnsModels;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use OwnsModels;
}
class Post extends Model
{
}
$user = User::find($user_id);
$post = Post::find($post_id);
if ($user->owns($post)) {
// Continue execution
}
if ($user->doesntOwn($post)) {
// Generate some authorisation error
}
Prior to Laravel 5.2, the primary key of the model was returned as a string. As a result, this package does loose comparisons by default, to provide maximum version compatibility., (*6)
If you want to perform strict comparisons in older versions, you can add your primary key field to the $casts
property as an integer and call the owns
method with additional parameters:, (*7)
$user->owns($post, null, true);
$user->doesntOwn($post, null, true);
At the first release of this package, I believe people are more likely to change the second ($foreignKey
) parameter than explicitly set the third ($strict
) parameter. If you think otherwise, or have a better way of handling this, please get in touch!, (*8)
Support
If you are having general issues with this package, feel free to contact me on Twitter., (*9)
If you believe you have found an issue, please report it using the GitHub issue tracker, or better yet, fork the repository and submit a pull request., (*10)
If you're using this package, I'd love to hear your thoughts. Thanks!, (*11)