Sabtu, 19 Februari 2022

Cara agar user non aktif tidak bisa login ke Laravel UI 8

 Menggunakan Laravel UI tentunya telah dibuatkan yang istilahnya scafolding nya, yaitu dibuatkan route, model, controller views dan database-nya, Sekarang gimana ya cara kita bisa memodifikasi scafolding tersebut biar misal user tersebut non aktif dan tidak bisa login..

Caranya buka trait AuthenticatesUsers yg lokasi nya di :

    vendor/laravel/ui/auth-backend/AuthenticatesUsers.php

Atau dengan kalau di visual studi code anda diinstall plugin laravel tinggal ctrl klik aja AuthenticatesUsers di login controller terus langsung deh menuju lokasi file -nya

Dia asumsikan dalam database ditambahi field "is_active" maka kita cukup tambahkan script berikut

         $user = User::where('email', $request->email)->first();

        if ($user && $user->is_active == 0) {

            abort(403, 'Your account has been disabled by an administrator.');

        }

yang saya letakkan disini :

 public function login(Request $request)
    {

        $this->validateLogin($request);

        // If the class is using the ThrottlesLogins trait, we can automatically throttle
        // the login attempts for this application. We'll key this by the username and
        // the IP address of the client making these requests into this application.
        if (
            method_exists($this, 'hasTooManyLoginAttempts') &&
            $this->hasTooManyLoginAttempts($request)
        ) {
            $this->fireLockoutEvent($request);

            return $this->sendLockoutResponse($request);
        }

        // Check if user is active
        $user = User::where('email', $request->email)->first();
        if ($user && $user->is_active == 0) {
            abort(403, 'Your account has been disabled by an administrator.');
        }

        if ($this->attemptLogin($request)) {
            if ($request->hasSession()) {
                $request->session()->put('auth.password_confirmed_at', time());
            }

            return $this->sendLoginResponse($request);
        }

        // If the login attempt was unsuccessful we will increment the number of attempts
        // to login and redirect the user back to the login form. Of course, when this
        // user surpasses their maximum number of attempts they will get locked out.
        $this->incrementLoginAttempts($request);

        return $this->sendFailedLoginResponse($request);
    }

And jangan lupa import model User supaya jika database user ada di database lain bisa konek,, tapi kalau cuman ada 1 database sih gk perlu import model user...

Rabu, 02 Februari 2022

Mengubah nama tabel default spatie di laravel 8

 Jadi ceritanya gini, awalnya aku sudah buat aplikasi di kantor menggunakan laravel, dan manajemen user role & permissionya menggunakan spatie. Di awal emang untuk usernya menggunakan email & password. Kemudian setelah sekian lama terbentuk database karyawan, sehingga perlu merubah yang awalnya usernya menggunakan email, kemudian dirubah menjadi password, sedangkan sudah banyak permisson & role yang sudah aku buat. Jadi yang perlu dirubah adalah cuman tabel user, model_has_role, dan model_has_permission. Pertanyaanya dimana ya cara merubah nama tabelnya ?

Untuk tabel user mudah sekali ditemukan kita cukup pergi ke model user kemudian tambahkan protected tabelnya

class User extends Authenticatable
{
    use HasFactory, Notifiable, HasRoles, HasPermissions;
    protected $table = 'user2s';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'image',
        'email',
        'password',

Contoh di atas misal nama tabel yg sebelumnya adalah user, saya rubah menjadi user2s

Kemudian untuk settingan yang 2 tabel lainnya ada di folder config->permission

  'permissions' => 'permissions',

        /*
         * When using the "HasPermissions" trait from this package, we need to know which
         * table should be used to retrieve your models permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_permissions' => 'model_has_permission2s',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your models roles. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'model_has_roles' => 'model_has_role2s',

        /*
         * When using the "HasRoles" trait from this package, we need to know which
         * table should be used to retrieve your roles permissions. We have chosen a
         * basic default value but you may easily change it to any table you like.
         */

        'role_has_permissions' => 'role_has_permissions',

terlihat aku hanya merubah nama tabel model_has_permission dan model_has_role,, jadi ak gak perlu repot-repot setting role dan permission baru.

Setting Time Zone Mysql di PHP myadmin untuk Indonesia

 Sebenernya banyak cara untuk setting time zone mysql, supaya saat tanggal di set current date time itu bisa sesuai dengan jam di indonesia.

Cara pertama menggunakan konfigurasi my.cnf

setting seperti ini

[client-server]


# Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/

!includedir /etc/mysql/mariadb.conf.d/

default-time-zone = "+07:00"


Cara ke dua menggunakan variabel session

Dan cara yang menurut saya paling cepat yaitu menggunakan script sql, berikut ini caranya :

SET GLOBAL time_zone = '+07:00';
SET GLOBAL time_zone = 'Asia/Jakarta';
SET @@global.time_zone='+07:00';