public function can($permissionId, $user) { $queryObj = ChannelPermission::select(array('channel_permission.permission_id', 'channel_permission.role_id', 'channel_permission.channel_id'))->leftJoin('channels as ch', function ($join) { $join->on('channel_permission.channel_id', '=', 'ch.id'); //$join->on('category_forum_permission.role_id', '=', 1); })->with('role', 'channel', 'permission')->where('channel_id', '=', $this->id); $permissions = $queryObj->get(); if ($user == null) { if (in_array(2, $queryObj->lists('role_id'))) { if ($permissionId == 17 || $permissionId == 21) { return true; } } return false; } if ($user && $user->roles->contains(1)) { return true; } foreach ($permissions as $permission) { $permissionById = Permission::find($permissionId); if ($permissionById) { if ($permission->permission->id == $permissionId) { if ($user && $user->roles->contains($permission->role->id)) { return true; } } } } return false; }