Changes between Version 15 and Version 16 of Имплементација


Ignore:
Timestamp:
11/21/21 17:31:20 (3 years ago)
Author:
151545
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Имплементација

    v15 v16  
    131131}}}
    132132''Методи од контролерот VerifyLoginController''\\
    133 Секогаш почнуваме со приказ на интерфејсот т.е. index методот која ни служи за таа намена. Откако корисникот ќе се најави ќе стигне барањето до методот verify кој ќе го прими барањето, ќе направи декодирање на претходно енкодираниот $hashid и ќе му дозволи на корисникот да се најави во системот.\\
     133Секогаш почнуваме со приказ на интерфејсот т.е. index методот која ни служи за приказ на целата колекција од податоци. Откако корисникот ќе се најави ќе стигне барањето до методот verify кој ќе го прими барањето, ќе направи декодирање на претходно енкодираниот $hashid и ќе му дозволи на корисникот да се најави во системот.\\
    134134
    135135=== Управување со оддели
     
    372372
    373373
    374 === Уредување на кориснички податоци
    375 
    376 {{{
    377 
     374=== Корисници и уредување на кориснички податоци
     375
     376Секој корисник има можност да ги промени своите податоци за профилот како и администраторот има можност да ги промени податоците за секој корисник и да додаде нови. Исто така секој корисник има можност да ги менува е-адресата, корисничкото име или лозинката. Дополнително администраторот има можност да постави валидациски правила за прикачување на нови датотеки. Ќе започнам со објаснување на контролерот UsersController преку кој се креираат нови корисници или се менуваат кориснички податоци.\\
     377
     378{{{
     379Route::group(['middleware' => 'permission:view_all_users'], function () {
     380        Route::get("/users", "Dashboard\UsersController@index")->name("dashboard.users.index");
     381    });
     382
     383    Route::group(['middleware' => 'permission:manage_all_users'], function () {
     384        Route::post("/users/store", "Dashboard\UsersController@store")->name("dashboard.users.store");
     385        Route::patch("/users/{id}/edit", "Dashboard\UsersController@edit")->name("dashboard.users.edit");
     386        Route::patch("/users/{id}/block", "Dashboard\UsersController@block")->name("dashboard.users.block");
     387        Route::patch("/users/{id}/unblock", "Dashboard\UsersController@unblock")->name("dashboard.users.unblock");
     388        Route::delete("/users/{id}/destroy", "Dashboard\UsersController@destroy")->name("dashboard.users.destroy");
     389    });
    378390}}}
    379 
     391''Листа на рути за управување со корисници''\\
     392Рутата за приказ на корисници е посебно дефинирана со цел да се овозможи пристап за корисници од различни ролји т.е. референтот да има можност да ја види листата со корисници но да нема можност да управува со нив.\\
     393
     394{{{
     395public function index()
     396    {
     397        return view("dashboard.users.index")->with([
     398            "users" => User::all(),
     399            "roles" => Role::all()
     400        ]);
     401    }
     402
     403    public function store(NewUserRequest $request)
     404    {
     405        $user = new User();
     406
     407        $user->name = $request->name;
     408        $user->surname = $request->surname;
     409        $user->email = $request->email;
     410        $user->phone_number = $request->phone_number;
     411        $user->username = $request->username;
     412        $user->password = $user->generateTemporaryPassword();
     413        $user->security_code = $user->generateSecurityCode();
     414        $user->verify_token = $user->generateVerifyToken();
     415
     416        $user->role_id = $request->userRole;
     417
     418        if ($request->hasFile("avatar")) {
     419            $image = $request->file("avatar");
     420            $avatarName = $user->id . '_avatar' . time() . '.' . request()->avatar->getClientOriginalExtension();
     421
     422            if (!empty($user->avatar)) {
     423                Storage::disk('uploads')->delete("/users/" . $user->avatar);
     424            }
     425
     426            Storage::disk('uploads')->put("/users/" . $avatarName, File::get($image));
     427
     428            $user->avatar = $avatarName;
     429        }
     430
     431        $user->created_by = auth()->user()->id;
     432        $user->save();
     433
     434        $user->notify(new WelcomeUser($user));
     435
     436        Alert::flash("New user added successfully");
     437
     438        return redirect()->route("dashboard.users.index");
     439    }
     440}}}
     441''Методи на контролерот UsersController за приказ и креирање на корисници''
     442Додавање на нов корисник оди преку методот store кој како параметар го прима барањето кое ќе го валидира според правилата дефинирани во NewUserRequest класата. Некои од податоците за кои не им се доделува вредност при креирање креирав методи во User моделот за генерирање на random вредности со цел за да помине валидацијата на тие задолжителни полиња како на пример што е generateTemporaryPassword() методот. За корисникот исто така може да се додаде слика која ја зачувуваме во сервер. На крај се зачувува корисникот и се праќа нотификација од класата WelcomeUser() преку која праќаме маил до новиот корисник за креирање на нова лозинка со што корисникот ќе има активен профил и ќе може да се најави. На сличен начин работи и контролерот за уредување на кориснички податоци. За разлика од креирање во тој дел доколку се промени е-адресата на корисникот се генеира нов токен за верификација како и безбедносен код и се праќаат до корисникот со цел да го верифицира истиот и да може да се најави пак во системот.\\
     443
     444{{{
     445if($user->isDirty('email')) {
     446            $user->is_active = false;
     447            $user->security_code = $user->generateSecurityCode();
     448            $user->verify_token = $user->generateVerifyToken();
     449            $user->notify(new VerifyNewEmail($user));
     450        }
     451}}}
     452''Дел од методот за уредување на корисник (промена на е-адреса)''\\
     453
     454
     455{{{
     456public function block(Request $request, $id)
     457    {
     458        $user = User::find($id);
     459        $user->is_active = false;
     460        $user->save();
     461        Alert::flash($user->name . " User blocked successfully");
     462        return redirect()->route("dashboard.users.index");
     463    }
     464}}}
     465''Методот за блокирање на корисник''
     466Доколку еден корисник не работи веќе во фирмата тоа значи дека истиот не смее да се најави веќе во системот. Со таа намена методот block го менува статусот на корисникот од активен во не активен и не му дозволува да се најави во системот. На ист начин може и да се деблокира еден корисник.\\
     467
     468
     469{{{
     470public function editUserData(UpdateUserData $request, $id)
     471    {
     472        $user = User::findOrFail($id);
     473        $user->name = $request->name;
     474        $user->surname = $request->surname;
     475        $user->phone_number = $request->phone_number;
     476
     477        if ($request->hasFile("avatar")) {
     478            $image = $request->file("avatar");
     479            $avatarName = $user->id . '_avatar' . time() . '.' . request()->avatar->getClientOriginalExtension();
     480
     481            if (!empty($user->avatar)) {
     482                Storage::disk('uploads')->delete("/users/" . $user->avatar);
     483            }
     484
     485            Storage::disk('uploads')->put("/users/" . $avatarName, File::get($image));
     486
     487            $user->avatar = $avatarName;
     488        }
     489
     490        $user->save();
     491
     492        Alert::flash("User data updated successfully");
     493
     494        return redirect()->route("dashboard.settings.index");
     495    }
     496}}}
     497''Метод за промена на личните кориснички податоци''
     498Преку методот editUserData секој најавен корисник има можност да си ги менува своите лични кориснички податоци како име, презиме, мобилен број или слика.\\
     499
     500
     501
     502{{{
     503public function destroy(Request $request, $id)
     504    {
     505        $user = User::find($id);
     506
     507        if(Folder::where('user_id', $user->id)->count() == 0) {
     508            if (Storage::disk("uploads")->exists("users" . DIRECTORY_SEPARATOR . $user->avatar)) {
     509                Storage::disk("uploads")->delete("users" . DIRECTORY_SEPARATOR . $user->avatar);
     510            }
     511
     512            $user->delete();
     513
     514            Alert::flash($user->name . " deleted successfully");
     515
     516            return redirect()->route("dashboard.users.index");
     517        }
     518        else {
     519            Alert::flash($user->name . "has associated folders");
     520
     521            return redirect()->back();
     522        }
     523    }
     524}}}
     525''Метод за бришење на корисник''\\
     526Администраторот на апликацијата има можност да избрише корисник со користење на методот destroy. При бришење во истиот момент је отстранува и сликата од профилот на корисникот од сервер како и сите податоци за него во база. Притоа, еден корисник може да се избрише само доколку нема асоцирани фолдери во него т.е. доколку тој корисник никогаш не додал фолдери и датотеки во одреден оддел.\\
     527
     528
     529{{{
     530public function updateUsername(UsernameSettingsRequest $request)
     531    {
     532            $user = auth()->user();
     533            $user->username = $request->username;
     534            $user->updated_at = Carbon::now();
     535            $user->save();
     536
     537            Alert::flash("Username updated successfully");
     538
     539            auth()->logout();
     540            session()->flush();
     541
     542            return redirect()->route("auth.showLogin");
     543    }
     544}}}
     545''Метод за промена на корисничко име во SettingsController контролерот''
     546Преку методот updateUsername корисникот има можност да го промени своето корисничко име. Методот како параметар го добива барањето кое ќе биде валидирано според правилата поставени во UsernameSettingsRequest. По завршена акција корисникот се одјавува. Доколку се промени е-адресата тој исто така добива и маил за потврда на новата со цел да може да се најави пак. На ист начин работи и методот за промена на лозинка.\\
     547
     548{{{
     549public function fileTypes(FileTypeRequest $request)
     550    {
     551        $fileType = FileType::find("1");
     552
     553        $fileType->mimes = $request->mimes;
     554        $fileType->max_size = $request->max_size;
     555        $fileType->user_id = auth()->id();
     556        $fileType->updated_at = Carbon::now();
     557
     558        if(auth()->user()->hasPermission("manage_file_types")) {
     559            $fileType->save();
     560
     561            Alert::flash("File validations updated successfully");
     562
     563            return redirect()->back();
     564        }
     565        else {
     566            Alert::flash("You don't have permission to change file validations", "error");
     567
     568            return redirect()->back();
     569        }
     570    }
     571}}}
     572''Метод за промена на валидациски правила во SettingsController контролерот''\\
     573Валидациските правила се зачувуваат во база во еден ред од посебна табела и истите потоа се превземаат при валидација за прикачување на датотеки. Администраторот има можност да ги дефинира сите дозволени типови на датотеки кои можат да се прикачат како и максималната големина по датотека.\\
     574
     575
     576{{{
     577$mimes = FileType::find("1")->mimes;
     578        $maxSize = FileType::find("1")->max_size;
     579
     580        if ($this->isMethod("patch")) {
     581            $fileRules = [
     582                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
     583            ];
     584        }
     585
     586        else {
     587            $fileRules = [
     588                "file_item.*" => "mimes:{$mimes}|max:{$maxSize}"
     589            ];
     590        }
     591}}}
     592''Дел од кодот за валидација на датотеки''
     593Во овој дел од FolderRequest класата за валидација на нов фолдер може да се забележи дека во mimes се запишуваат типови на датотеки кои што администраторот претходно ги дефинирал преку методот fileTypes(). Прво го наоѓаме првиот ред од база од класата FileType и неговите податоци ги поставуваме како валидациски правила.
     594
     595===Управување со фолдери и датотеки
     596
     597
     598
     599
     600
     601
     602
     603
     604
     605 
     606
     607
     608
     609
     610
     611
     612
     613
     614
     615