/** * Get the IDs of the provided abilities. * * @param \Silber\Bouncer\Database\Ability|array|int $abilities * @param \Illuminate\Database\Eloquent\Model|string|null $model * @return array */ protected function getAbilityIds($abilities, $model) { if ($abilities instanceof Ability) { return [$abilities->getKey()]; } if (!is_null($model)) { return [$this->getModelAbility($abilities, $model)->getKey()]; } return $this->abilitiesByName($abilities)->pluck('id')->all(); }
/** * Setup the database schema. * * @return void */ public function setUp() { Role::$userModel = User::class; Ability::$userModel = User::class; $this->schema()->create('users', function ($table) { $table->increments('id'); $table->timestamps(); }); $this->schema()->create('abilities', function ($table) { $table->increments('id'); $table->string('title'); $table->integer('entity_id')->unsigned()->nullable(); $table->string('entity_type')->nullable(); $table->timestamps(); $table->unique(['title', 'entity_id', 'entity_type']); }); $this->schema()->create('roles', function ($table) { $table->increments('id'); $table->string('title')->unique(); $table->timestamps(); }); $this->schema()->create('user_roles', function ($table) { $table->integer('role_id')->unsigned(); $table->integer('user_id')->unsigned(); }); $this->schema()->create('user_abilities', function ($table) { $table->integer('ability_id')->unsigned(); $table->integer('user_id')->unsigned(); }); $this->schema()->create('role_abilities', function ($table) { $table->integer('ability_id')->unsigned(); $table->integer('role_id')->unsigned(); }); }
/** * Run the database seeds. * * @return void */ public function run() { $abs = [['name' => 'users.view', 'title' => 'View Users', 'description' => ''], ['name' => 'users.manage', 'title' => 'Manage Users', 'description' => ''], ['name' => 'system.view', 'title' => 'View System Settings', 'description' => ''], ['name' => 'system.manage', 'title' => 'Manage System Settings', 'description' => '']]; foreach ($abs as $ab) { \Silber\Bouncer\Database\Ability::create($ab); } }
/** * Create abilities whose name is not in the given list. * * @param \Illuminate\Database\Eloquent\Collection $models * @param array $abilities * @return \Illuminate\Database\Eloquent\Collection */ protected function createMissingAbilities(Collection $models, array $abilities) { $missing = array_diff($abilities, $models->pluck('name')->all()); $created = []; foreach ($missing as $ability) { $created[] = Ability::create(['name' => $ability]); } return $created; }
/** * Set the name of the user model on the role and Ability classes. * * @return void */ protected function setUserModel() { $model = $this->app->make('config')->get('auth.model'); Ability::$userModel = $model; Role::$userModel = $model; }
/** * Get the ability IDs from the titles present in the given array. * * @param array $abilities * @return array */ protected function getAbilityIdsFromStrings(array $abilities) { $titles = array_filter($abilities, 'is_string'); if (!count($titles)) { return []; } return Ability::whereIn('title', $titles)->lists('id')->all(); }
/** * Get a list of the user's abilities. * * @param \Illuminate\Database\Eloquent\Model $user * @return \Illuminate\Database\Eloquent\Collection */ public function getAbilities(Model $user) { $query = Ability::whereHas('roles', $this->getRoleUsersConstraint($user)); return $query->orWhereHas('users', $this->getUserConstraint($user))->get(); }
/** * Deserialize an array of abilities into a collection of models. * * @param array $abilities * @return \Illuminate\Database\Eloquent\Collection */ protected function deserializeAbilities(array $abilities) { return Ability::hydrate($abilities); }
/** * Fetch a list of the user's abilities from the database. * * @param \Illuminate\Database\Eloquent\Model $user * @return stdClass[] */ protected function fetchUserAbilities(Model $user) { $query = Ability::whereHas('roles', $this->getRoleUsersConstraint($user)); $query->orWhereHas('users', $this->getUserConstraint($user)); return $query->getQuery()->select('title', 'entity_id', 'entity_type')->get(); }