Index: app/Http/Controllers/Auth/CreatePasswordController.php
===================================================================
--- app/Http/Controllers/Auth/CreatePasswordController.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Http/Controllers/Auth/CreatePasswordController.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -36,4 +36,6 @@
         $user->save();
 
+        session()->flash("password_created", "You have created a password successfully!");
+
         return redirect()->route("auth.loginShow");
     }
Index: app/Http/Controllers/Dashboard/PostsController.php
===================================================================
--- app/Http/Controllers/Dashboard/PostsController.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Http/Controllers/Dashboard/PostsController.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -5,8 +5,10 @@
 use App\Helpers\Alert;
 use App\Http\Requests\Dashboard\PostRequest;
+use App\Models\Review;
 use App\Models\Tag;
 use App\Models\Post;
 use App\Models\User;
 use App\Models\Category;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Str;
 use Illuminate\Http\Request;
@@ -91,39 +93,61 @@
     public function store(PostRequest $request)
     {
-        $post = new Post();
-        $user = auth()->user();
-        $category = Category::find($request->category);
-
-        $post->user()->associate($user);
-        $post->category()->associate($category);
-
-        $post->title = $request->title;
-
-        $image = $request->file("image");
-        $extension = $image->getClientOriginalExtension();
-        $imageName = $this->createImageName($extension);
-        Storage::disk('uploads')->put($imageName, File::get($image));
-
-        $post->image_link = $imageName;
-        $post->content = Purifier::clean($request->post_content, 'youtube');
-
-        $post->slug = $post->createSlug();
-
-        if ($post->user->hasPermission("publish_post")) {
-            $post->confirmed_by = $post->user->id;
-            $post->is_active = 1;
-            $post->is_confirmed = true;
-        }
-
-        $post->save();
-        $this->checkNewAndSaveTags($post, $request->tags);
-
-        if ($post->user->hasPermission("publish_post")) {
-            Alert::flash("New posts published successfully");
-        } else {
-            Alert::flash("New posts submitted for review successfully");
-            $adminsAndEditors = User::where("role_id", 1)->orWhere("role_id", 2)->get();
-            Notification::send($adminsAndEditors, new NewPostCreated("Have new post for review"));
-        }
+        DB::transaction(function () use ($request) {
+            $post = new Post();
+            $user = auth()->user();
+            $category = Category::find($request->category);
+
+            $post->user()->associate($user);
+            $post->category()->associate($category);
+
+            $post->title = $request->title;
+
+            $image = $request->file("image");
+            $extension = $image->getClientOriginalExtension();
+            $imageName = $this->createImageName($extension);
+            Storage::disk('uploads')->put($imageName, File::get($image));
+
+            $post->image_link = $imageName;
+            $post->content = Purifier::clean($request->post_content, 'youtube');
+
+            $post->slug = $post->createSlug();
+
+            $needReview = $post->needReview();
+
+            if (is_null($needReview)) {
+                $post->confirmed_by = $post->user->id;
+                $post->is_active = 1;
+                $post->is_confirmed = true;
+            }
+
+            $post->save();
+            $this->checkNewAndSaveTags($post, $request->tags);
+
+            if ($needReview) {
+
+                $review = new Review();
+                $review->post()->associate($post);
+                $review->postSecurity()->associate($needReview);
+                $review->current_phase = $review->postSecurity->phases()->first()->id;
+                $review->save();
+
+                Alert::flash("New posts submitted for review successfully");
+
+                Notification::send(
+                    User::whereRoleId($review->postSecurity->role->id)->get(),
+                    new NewPostCreated("Have new post for review")
+                );
+            } else {
+                Alert::flash("New posts published successfully");
+            }
+        });
+
+//        if ($post->user->hasPermission("publish_post")) {
+//            Alert::flash("New posts published successfully");
+//        } else {
+//            Alert::flash("New posts submitted for review successfully");
+//            $adminsAndEditors = User::where("role_id", 1)->orWhere("role_id", 2)->get();
+//            Notification::send($adminsAndEditors, new NewPostCreated("Have new post for review"));
+//        }
 
         return redirect()->route("dashboard.posts.create");
@@ -135,19 +159,31 @@
         $flag = false;
 
-        if (auth()->user()->hasPermission("confirm_post")) {
-            $flag = true;
-        }
-
-        if ($flag) {
-
-            $post->is_confirmed = true;
-            $post->confirmed_by = auth()->user()->id;
-
-            $post->save();
-
-            Alert::flash("Post confirmed successfully");
-
-            $post->user->notify(new PostConfirmed("Your post has been confirmed"));
-        }
+//        if (auth()->user()->hasPermission("confirm_post")) {
+//            $flag = true;
+//        }
+
+        if (!$post->review->canReview()) {
+            Alert::flash("Post need to be confirmed by " . $post->review->getCurrentReviewer()->name, "error");
+            return redirect()->back();
+        }
+
+        DB::transaction(function () use ($post) {
+
+            $post->review->increment("current_phase");
+            $post->review->save();
+
+            if (is_null($post->review->getPhase())) {
+
+                $post->review->is_passed_all_phases = true;
+                $post->review->save();
+
+                $post->is_confirmed = true;
+                $post->confirmed_by = auth()->user()->id;
+                $post->save();
+                $post->user->notify(new PostConfirmed("Your post has been confirmed"));
+            }
+        });
+
+        Alert::flash("Post confirmed successfully");
 
         return redirect()->route("dashboard.posts.index");
Index: app/Http/Controllers/Dashboard/SettingsController.php
===================================================================
--- app/Http/Controllers/Dashboard/SettingsController.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Http/Controllers/Dashboard/SettingsController.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -6,9 +6,14 @@
 use App\Http\Requests\Dashboard\EmailSettingsRequest;
 use App\Http\Requests\Dashboard\PasswordSettingsRequest;
+use App\Http\Requests\Dashboard\PhaseRequest;
 use App\Http\Requests\Dashboard\PhotosSettingsRequest;
+use App\Http\Requests\Dashboard\PostSecurityRequest;
 use App\Http\Requests\Dashboard\SocialLinksSettingsRequest;
 use App\Http\Requests\Dashboard\UsernameSettingsRequest;
 use App\Http\Requests\Dashboard\UserProfileSettingsRequest;
+use App\Models\Phase;
 use App\Models\Post;
+use App\Models\PostSecurity;
+use App\Models\Role;
 use App\Models\User;
 use App\Models\UserProfile;
@@ -30,5 +35,8 @@
             "userProfile" => auth()->user()->userProfile,
             "countries" => Country::all(),
-            "adminAndEditors" => User::where("role_id", 1)->orWhere("role_id", 2)->get()
+            "adminAndEditors" => User::where("role_id", 1)->orWhere("role_id", 2)->get(),
+            "userRoles" => Role::all(),
+            "phases" => Phase::all(),
+            "postSecurities" => PostSecurity::all()
         ]);
     }
@@ -179,4 +187,66 @@
     }
 
+    public function phaseStore(PhaseRequest $request)
+    {
+        if ($request->has("phase_id") && !is_null($request->phase_id)) {
+            $phase = Phase::findOrFail($request->phase_id);
+        } else {
+            $phase = new Phase();
+        }
+
+        $phase->name = $request->name;
+        $phase->reviewer()->associate(Role::find($request->reviewer_role_id));
+        $phase->user()->associate(auth()->user());
+        $phase->save();
+
+        if ($request->has("phase_id") && !is_null($request->phase_id)) {
+            Alert::flash($phase->name . " updated successfully");
+        } else {
+            Alert::flash($phase->name . " created successfully");
+        }
+
+        return redirect()->route("dashboard.settings.index");
+    }
+
+    public function phaseDestroy($id)
+    {
+        $phase = Phase::findOrFail($id);
+        $phaseName = $phase->name;
+        $phase->delete();
+
+        Alert::flash($phaseName . " deleted successfully");
+
+        return redirect()->route("dashboard.settings.index");
+    }
+
+    public function postSecurityStore(PostSecurityRequest $request)
+    {
+        if ($request->has("post_security_id") && !is_null($request->post_security_id)) {
+            $postSecurity = PostSecurity::findOrFail($request->post_security_id);
+        } else {
+            $postSecurity = new PostSecurity();
+        }
+
+        $postSecurity->role()->associate(Role::find($request->role_id_to_be_reviewed));
+        $postSecurity->phase_ids = $request->phase_ids;
+
+        $postSecurity->save();
+
+        if ($request->has("post_security_id") && !is_null($request->post_security_id)) {
+            Alert::flash("Post security updated successfully");
+        } else {
+            Alert::flash("Post security created successfully");
+        }
+
+        return redirect()->route("dashboard.settings.index");
+    }
+
+    public function postSecurityDestroy($id)
+    {
+        PostSecurity::findOrFail($id)->delete();
+        Alert::flash("Post security deleted successfully");
+        return redirect()->route("dashboard.settings.index");
+    }
+
     private function updatePhotosHelper(Request $request, UserProfile $userProfile)
     {
Index: app/Http/Controllers/Dashboard/UsersController.php
===================================================================
--- app/Http/Controllers/Dashboard/UsersController.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Http/Controllers/Dashboard/UsersController.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -10,4 +10,5 @@
 use App\Notifications\WelcomeUser;
 use App\Http\Controllers\Controller;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Storage;
 use Propaganistas\LaravelPhone\PhoneNumber;
@@ -32,28 +33,32 @@
     public function store(NewUserRequest $request)
     {
-        $user = new User();
+        DB::transaction(function () use ($request) {
 
-        $user->name = $request->name;
-        $user->surname = $request->surname;
-        $user->email = $request->email;
-        $user->country_code = $request->mobile_number_country;
-        $user->mobile_number = PhoneNumber::make($request->mobile_number, $request->mobile_number_country)->formatInternational();
-        $user->username = $request->username;
-        $user->password = $user->generateTemporaryPassword();
-        $user->security_code = $user->generateSecurityCode();
-        $user->verify_token = $user->generateVerifyToken();
+            $user = new User();
 
-        $user->role_id = $request->userRole;
+            $user->name = $request->name;
+            $user->surname = $request->surname;
+            $user->email = $request->email;
+            $user->country_code = $request->mobile_number_country;
+            $user->mobile_number = PhoneNumber::make($request->mobile_number, $request->mobile_number_country)->formatInternational();
+            $user->username = $request->username;
+            $user->password = $user->generateTemporaryPassword();
+            $user->security_code = $user->generateSecurityCode();
+            $user->verify_token = $user->generateVerifyToken();
 
-        $user->save();
+            $user->role_id = $request->userRole;
 
-        $user->userProfile()->create([
-            "profile_link" => $user->generateProfileLink($request->name, $request->surname),
-            "technoblog_email" => $user->generateTechnoblogEmail($request->name, $request->surname)
-        ]);
+            $user->save();
 
-        $user->notify(new WelcomeUser($user));
+            $user->userProfile()->create([
+                "profile_link" => $user->generateProfileLink($request->name, $request->surname),
+                "technoblog_email" => $user->generateTechnoblogEmail($request->name, $request->surname)
+            ]);
 
-        Alert::flash("New user added successfully");
+            $user->notify(new WelcomeUser($user));
+
+            Alert::flash("New user added successfully");
+
+        });
 
         return redirect()->route("dashboard.users.create");
Index: app/Http/Requests/Dashboard/NewUserRequest.php
===================================================================
--- app/Http/Requests/Dashboard/NewUserRequest.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Http/Requests/Dashboard/NewUserRequest.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -38,10 +38,12 @@
     protected function getValidatorInstance()
     {
-        if($this->request->has("mobile_number") && $this->request->has("mobile_number_country")) {
-            $this->request->set("mobile_number", PhoneNumber::make(
-                $this->request->get("mobile_number"),
-                $this->request->get("mobile_number_country")
-            )->formatInternational());
-        }
+        try {
+            if($this->request->has("mobile_number") && $this->request->has("mobile_number_country")) {
+                $this->request->set("mobile_number", PhoneNumber::make(
+                    $this->request->get("mobile_number"),
+                    $this->request->get("mobile_number_country")
+                )->formatInternational());
+            }
+        } catch (\Exception $e) {}
 
         return parent::getValidatorInstance();
Index: app/Http/Requests/Dashboard/PhaseRequest.php
===================================================================
--- app/Http/Requests/Dashboard/PhaseRequest.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ app/Http/Requests/Dashboard/PhaseRequest.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Http\Requests\Dashboard;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class PhaseRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        if ($this->has("phase_id") && !is_null($this->request->get("phase_id"))) {
+            return auth()->user()->hasPermission("edit_phase");
+        }
+
+        return auth()->user()->hasPermission("create_phase");
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        $rules = [
+            "name" => "required|min:2|unique:phases",
+            "reviewer_role_id" => "required|exists:roles,id",
+        ];
+
+        if ($this->has("phase_id") && !is_null($this->request->get("phase_id"))) {
+            $rules["name"] = "required|min:2|unique:phases,name," . $this->request->get("phase_id");
+            $rules["phase_id"] = "required|exists:phases,id";
+        }
+
+        return $rules;
+    }
+}
Index: app/Http/Requests/Dashboard/PostSecurityRequest.php
===================================================================
--- app/Http/Requests/Dashboard/PostSecurityRequest.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ app/Http/Requests/Dashboard/PostSecurityRequest.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,53 @@
+<?php
+
+namespace App\Http\Requests\Dashboard;
+
+use App\Models\Phase;
+use Illuminate\Foundation\Http\FormRequest;
+
+class PostSecurityRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        if ($this->has("post_security_id") && !is_null($this->request->get("post_security_id"))) {
+            return auth()->user()->hasPermission("edit_post_securities");
+        }
+
+        return auth()->user()->hasPermission("create_post_securities");
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            "role_id_to_be_reviewed" => "required|exists:roles,id",
+            "phase_ids" => [
+                "required",
+                function($attribute, $value, $fail) {
+                    $phases = explode(",", $value);
+                    foreach ($phases as $phase) {
+                        if(is_null(Phase::find($phase))) {
+                            $fail("Error occurred. Please try again!");
+                        }
+                    }
+                }
+            ],
+        ];
+    }
+
+    public function attributes()
+    {
+        return [
+            "phase_ids" => "phases"
+        ];
+    }
+}
Index: app/Models/Phase.php
===================================================================
--- app/Models/Phase.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ app/Models/Phase.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Phase extends Model
+{
+    protected $table = "phases";
+    protected $fillable = [
+        "name", "reviewer_role_id"
+    ];
+
+    public function user()
+    {
+        return $this->belongsTo(User::class);
+    }
+
+    public function reviewer()
+    {
+        return $this->belongsTo(Role::class, "reviewer_role_id");
+    }
+}
Index: app/Models/Post.php
===================================================================
--- app/Models/Post.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ app/Models/Post.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -16,4 +16,13 @@
 		return $this->belongsTo(User::class);
 	}
+
+	public function review() {
+		return $this->hasOne(Review::class);
+	}
+
+	public function needReview()
+    {
+        return PostSecurity::whereRoleId($this->user->role->id)->first();
+    }
 
 	public function category() {
Index: app/Models/PostSecurity.php
===================================================================
--- app/Models/PostSecurity.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ app/Models/PostSecurity.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PostSecurity extends Model
+{
+    protected $table = "post_securities";
+
+    protected $fillable = [
+        "role_id", "phases_id"
+    ];
+
+    public function role()
+    {
+        return $this->belongsTo(Role::class);
+    }
+
+    public function phases($onlyNames = false)
+    {
+        $collection = collect();
+        $names = [];
+        $phase_ids = explode(",", $this->phase_ids);
+
+        foreach ($phase_ids as $phase_id) {
+            $phase = Phase::findOrFail($phase_id);
+            array_push($names, $phase->name);
+            $collection->push($phase);
+        }
+
+        if ($onlyNames) return implode(", ", $names);
+
+        return $collection;
+    }
+
+    public function getPhasesAttribute()
+    {
+        return $this->phases();
+    }
+
+    public function getPhaseNamesAttribute()
+    {
+        return $this->phases(true);
+    }
+
+    public function hasNextPhase($id)
+    {
+        return in_array($id + 1, explode(",", $this->phases_id));
+    }
+}
Index: app/Models/Review.php
===================================================================
--- app/Models/Review.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ app/Models/Review.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Review extends Model
+{
+    protected $table = "post_reviews";
+
+    public function post()
+    {
+        return $this->belongsTo(Post::class);
+    }
+
+    public function postSecurity()
+    {
+        return $this->belongsTo(PostSecurity::class, "post_security_id");
+    }
+
+    public function getPhase()
+    {
+        return $this->postSecurity->phases()->where("id", $this->current_phase)->first();
+    }
+
+    public function canReview()
+    {
+        return $this->getPhase()->reviewer_role_id == auth()->user()->role->id;
+    }
+
+    public function getCurrentReviewer()
+    {
+        return $this->getPhase()->reviewer;
+    }
+}
Index: database/migrations/2019_10_25_180617_create_phases_table.php
===================================================================
--- database/migrations/2019_10_25_180617_create_phases_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ database/migrations/2019_10_25_180617_create_phases_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,45 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreatePhasesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('phases', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string('name')->unique();
+            $table->unsignedInteger('reviewer_role_id');
+            $table->unsignedInteger('user_id');
+
+            $table->foreign("reviewer_role_id")
+                ->references("id")
+                ->on("roles")
+                ->onDelete("cascade");
+
+            $table->foreign("user_id")
+                ->references("id")
+                ->on("users")
+                ->onDelete("cascade");
+
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('phases');
+    }
+}
Index: database/migrations/2019_10_25_180620_create_post_securities_table.php
===================================================================
--- database/migrations/2019_10_25_180620_create_post_securities_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ database/migrations/2019_10_25_180620_create_post_securities_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,39 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreatePostSecuritiesTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('post_securities', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->unsignedInteger('role_id');
+            $table->string('phase_ids');
+
+            $table->foreign("role_id")
+                ->references("id")
+                ->on("roles")
+                ->onDelete("cascade");
+
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('post_securities');
+    }
+}
Index: database/migrations/2019_10_25_180621_create_post_reviews_table.php
===================================================================
--- database/migrations/2019_10_25_180621_create_post_reviews_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
+++ database/migrations/2019_10_25_180621_create_post_reviews_table.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -0,0 +1,46 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreatePostReviewsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('post_reviews', function (Blueprint $table) {
+            $table->bigIncrements('id');
+            $table->integer('post_id')->unsigned();
+            $table->unsignedBigInteger('post_security_id');
+            $table->integer('current_phase');
+            $table->boolean('is_passed_all_phases')->default(false);
+
+            $table->foreign("post_id")
+                ->references("id")
+                ->on("posts")
+                ->onDelete("cascade");
+
+            $table->foreign("post_security_id")
+                ->references("id")
+                ->on("post_securities")
+                ->onDelete("cascade");
+
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('post_reviews');
+    }
+}
Index: database/seeds/PermissionsTableSeeder.php
===================================================================
--- database/seeds/PermissionsTableSeeder.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ database/seeds/PermissionsTableSeeder.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -13,18 +13,26 @@
 	{
 		DB::table('permissions')->insert([
-			["name" => "create_user"], 				// Create new user
-			["name" => "access_all_users"], 		// Access to all users to manage
-			["name" => "create_post"], 				// Create new post
-			["name" => "confirm_post"], 			// Confirm new post
-			["name" => "access_all_posts"], 		// Access to all posts to manage
-			["name" => "publish_all_posts"], 		// Publish and review all posts
-			["name" => "publish_post"], 			// Publish your posts only
-			["name" => "edit_all_posts"], 			// Edit all posts
-			["name" => "edit_post"], 				// Edit your posts only
-			["name" => "delete_all_posts"], 		// Delete all posts
-			["name" => "delete_post"], 				// Delete your posts only
-			["name" => "approve_all_comments"], 	// Approve comments of your posts and other users posts
-			["name" => "approve_comment"], 			// Approve your post comments
-			["name" => "access_all_categories"],	// Access to all categories to manage
+			["name" => "create_user"], 				    // Create new user
+			["name" => "access_all_users"], 		    // Access to all users to manage
+			["name" => "create_post"], 				    // Create new post
+			["name" => "confirm_post"], 			    // Confirm new post
+			["name" => "access_all_posts"], 		    // Access to all posts to manage
+			["name" => "publish_all_posts"], 		    // Publish and review all posts
+			["name" => "publish_post"], 			    // Publish your posts only
+			["name" => "edit_all_posts"], 			    // Edit all posts
+			["name" => "edit_post"], 				    // Edit your posts only
+			["name" => "delete_all_posts"], 		    // Delete all posts
+			["name" => "delete_post"], 				    // Delete your posts only
+			["name" => "approve_all_comments"], 	    // Approve comments of your posts and other users posts
+			["name" => "approve_comment"], 			    // Approve your post comments
+			["name" => "access_all_categories"],	    // Access to all categories to manage
+            ["name" => "access_all_phases"],	        // Access to all phases
+            ["name" => "create_phase"],	                // Create new phase
+            ["name" => "edit_phase"],	                // Edit phase
+            ["name" => "delete_phase"],	                // Delete phase
+            ["name" => "access_all_post_securities"],	// Access to all post securities
+            ["name" => "create_post_securities"],	    // Create new post security
+            ["name" => "edit_post_securities"],	        // Edit post security
+            ["name" => "delete_post_securities"],	    // Delete post security
 		]);
 	}
Index: database/seeds/RolesPermissionsTableSeeder.php
===================================================================
--- database/seeds/RolesPermissionsTableSeeder.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ database/seeds/RolesPermissionsTableSeeder.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -28,5 +28,13 @@
 			["role_id" => 1, "permission_id" => 13],
 			["role_id" => 1, "permission_id" => 14],
-			
+			["role_id" => 1, "permission_id" => 15],
+			["role_id" => 1, "permission_id" => 16],
+			["role_id" => 1, "permission_id" => 17],
+			["role_id" => 1, "permission_id" => 18],
+            ["role_id" => 1, "permission_id" => 19],
+            ["role_id" => 1, "permission_id" => 20],
+            ["role_id" => 1, "permission_id" => 21],
+            ["role_id" => 1, "permission_id" => 22],
+
 			// Editor
 			["role_id" => 2, "permission_id" => 3],
Index: public/assets/js/dash_app.js
===================================================================
--- public/assets/js/dash_app.js	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ public/assets/js/dash_app.js	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -25,4 +25,46 @@
 		})
 
+		$(".triggerPhaseModal").click(function() {
+
+		    if($(this).data("phase-id")) {
+                $(".phaseModal").find("input[name='phase_id']").val($(this).data("phase-id"));
+                $(".phaseModal").find("input[name='name']").val($(this).data("phase-name"));
+                $(".phaseModal").find("select[name='reviewer_role_id']")[0].selectize.setValue($(this).data("phase-reviewer"));
+            } else {
+                $(".phaseModal").find("form")[0].reset();
+                $(".phaseModal").find("select")[0].selectize.clear();
+            }
+
+            $(".phaseModal").modal("show");
+		})
+
+        $(".triggerPostSecurityModal").click(function() {
+            if($(this).data("post-security-id")) {
+                var phaseIds = $(this).data("post-security-phase-ids");
+                phaseIds = typeof phaseIds == "string" ? phaseIds.split(",") : phaseIds;
+                $(".postSecurityModal").find("input[name='post_security_id']").val($(this).data("post-security-id"));
+                $(".postSecurityModal").find("select[name='role_id_to_be_reviewed']")[0].selectize.setValue($(this).data("post-security-role"));
+                $(".postSecurityModal").find(".phasesSelect")[0].selectize.setValue(phaseIds);
+            } else {
+                $(".postSecurityModal").find("select").each(function(i, item) {
+                    $(item)[0].selectize.clear();
+                });
+            }
+
+            $(".postSecurityModal").modal("show");
+        });
+
+        if ($(".phasesSelect").length) {
+            $('#phasesSelect').selectize({
+                persist: false,
+                maxItems: null,
+            });
+        }
+
+        $(".postSecurityStore").submit(function() {
+            var selectedPhases = $(".phasesSelect")[0].selectize.items;
+            $(this).find("input[name='phase_ids']").val(selectedPhases);
+        })
+
 		var selectedCountry = [null];
 
@@ -138,5 +180,5 @@
 		});
 
-		$("#dttable").DataTable({
+		$("#dttable, .dttable").DataTable({
 			"processing": true,
 			"language": {
Index: resources/views/auth/login.blade.php
===================================================================
--- resources/views/auth/login.blade.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ resources/views/auth/login.blade.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -22,4 +22,11 @@
 									<div class="alert alert-danger alert-dismissible fade show" role="alert">
 										<strong> {{ Session::get('isActiveError') }} </strong>
+										<button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
+									</div>
+								@endif
+
+								@if(Session::has('password_created'))
+									<div class="alert alert-success alert-dismissible fade show" role="alert">
+										<strong> {{ Session::get('password_created') }} </strong>
 										<button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
 									</div>
Index: resources/views/dashboard/posts/edit.blade.php
===================================================================
--- resources/views/dashboard/posts/edit.blade.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ resources/views/dashboard/posts/edit.blade.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -12,4 +12,13 @@
 
 				<div class="col-sm-12">
+
+                    @if(!$post->review->is_passed_all_phases)
+                        <p class="text-center" style="font-size: 17px;">
+                            Current phase: {{ $post->review->getPhase()->name }}
+                            @if($post->review->canReview())
+                                <button class="btn btn-primary">Approve</button>
+                            @endif
+                        </p>
+                    @endif
 
 					<div class="card">
Index: resources/views/dashboard/settings/index.blade.php
===================================================================
--- resources/views/dashboard/settings/index.blade.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ resources/views/dashboard/settings/index.blade.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -25,10 +25,21 @@
                                     <div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist"
                                          aria-orientation="vertical">
-                                        <a class="nav-link active pt-2 pb-2" id="v-pills-home-tab" data-toggle="pill"
+                                        <a class="nav-link pt-2 pb-2" id="v-pills-home-tab" data-toggle="pill"
                                            href="#v-pills-home" role="tab" aria-controls="v-pills-home"
-                                           aria-selected="true">Profile Settings</a>
+                                           aria-selected="true">Profile</a>
                                         <a class="nav-link pt-2 pb-2" id="v-pills-profile-tab" data-toggle="pill"
                                            href="#v-pills-profile" role="tab" aria-controls="v-pills-profile"
-                                           aria-selected="false">Account Settings</a>
+                                           aria-selected="false">Account</a>
+                                        @if(auth()->user()->hasPermission("access_all_phases"))
+                                            <a class="nav-link pt-2 pb-2" id="v-pills-phases-tab" data-toggle="pill"
+                                               href="#v-pills-phases" role="tab" aria-controls="v-pills-phases"
+                                               aria-selected="false">Phases</a>
+                                        @endif
+
+                                        @if(auth()->user()->hasPermission("access_all_post_securities"))
+                                            <a class="nav-link active pt-2 pb-2" id="v-pills-post-security-tab" data-toggle="pill"
+                                               href="#v-pills-post-security" role="tab" aria-controls="v-pills-post-security"
+                                               aria-selected="false">Post Security</a>
+                                        @endif
                                     </div>
                                 </div>
@@ -36,5 +47,5 @@
                                 <div class="col-md-8">
                                     <div class="tab-content" id="v-pills-tabContent">
-                                        <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel"
+                                        <div class="tab-pane fade" id="v-pills-home" role="tabpanel"
                                              aria-labelledby="v-pills-home-tab">
 
@@ -488,4 +499,204 @@
                                             </div>
                                         </div>
+
+                                        @if (auth()->user()->hasPermission("access_all_phases"))
+                                            <div class="tab-pane fade" id="v-pills-phases" role="tabpanel"
+                                                 aria-labelledby="v-pills-phases-tab">
+
+                                                <fieldset class="form-fieldset">
+
+                                                    <h4 class="font-weight-normal border-bottom pb-4">
+                                                        Phases
+                                                        <span class="triggerPhaseModal float-right mb-2 d-inline-block btn btn-sm btn-primary">Create New</span>
+                                                    </h4>
+
+                                                    <div class="modal fade phaseModal" tabindex="-1" role="dialog" aria-hidden="true">
+
+                                                        <div class="modal-dialog modal-dialog-centered" role="document">
+
+                                                            <div class="modal-content">
+
+                                                                <div class="modal-header">
+                                                                    <h5 class="modal-title" id="exampleModalLabel">Create new phase</h5>
+                                                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"></button>
+                                                                </div>
+
+                                                                <div class="modal-body">
+
+                                                                    <form action="{{ route("dashboard.settings.phase.store") }}"
+                                                                          method="post">
+                                                                        @csrf
+
+                                                                        <input type="hidden" name="phase_id">
+
+                                                                        <label class="form-label">Name</label>
+                                                                        <input type="text" class="form-control"
+                                                                               name="name" autocomplete="off" required>
+
+                                                                        <label class="form-label mt-2">User role to review</label>
+                                                                        <select class="selectData" name="reviewer_role_id">
+                                                                            <option value=""></option>
+                                                                            @foreach ($userRoles as $userRole)
+                                                                                <option
+                                                                                    value="{{ $userRole->id }}"
+                                                                                    {{ (old("reviewer_role_id") == $userRole->id) ? "selected" : "" }}
+                                                                                >
+                                                                                    {{ ucfirst($userRole->name) }}
+                                                                                </option>
+                                                                            @endforeach
+                                                                        </select>
+
+                                                                        <div class="modal-footer pb-0">
+                                                                            <button type="button" class="btn btn-secondary"
+                                                                                    data-dismiss="modal">Close
+                                                                            </button>
+                                                                            <input type="submit" class="btn btn-primary"
+                                                                                   value="Submit">
+                                                                        </div>
+
+                                                                    </form>
+
+                                                                </div>
+
+                                                            </div>
+
+                                                        </div>
+
+                                                    </div>
+
+                                                    <table id="dttable" class="table table-hover table-outline table-vcenter text-nowrap card-table">
+                                                        <thead>
+                                                            <tr>
+                                                                <th>Name</th>
+                                                                <th>Reviewer</th>
+                                                                <th>Actions</th>
+                                                            </tr>
+                                                        </thead>
+                                                        <tbody>
+                                                            @foreach($phases as $phase)
+                                                                <tr>
+                                                                    <td>{{ $phase->name }}</td>
+                                                                    <td>{{ ucfirst($phase->reviewer->name) }}</td>
+                                                                    <td class="text-center">
+                                                                        <div class="item-action dropdown">
+                                                                            <a href="javascript:void(0)" data-toggle="dropdown" class="icon" aria-expanded="false"><i class="fe fe-more-vertical"></i></a>
+                                                                            <div class="dropdown-menu dropdown-menu-right" x-placement="bottom-end" style="position: absolute; transform: translate3d(15px, 20px, 0px); top: 0px; left: 0px; will-change: transform;">
+                                                                                <a href="javascript:void(0)" data-phase-id="{{ $phase->id }}" data-phase-name="{{ $phase->name }}" data-phase-reviewer="{{ $phase->reviewer->id }}" class="triggerPhaseModal dropdown-item"><i class="dropdown-icon fe fe-edit"></i> Edit</a>
+                                                                                <a href="javascript:void(0)" class="actionLink dropdown-item" style="cursor: pointer;" data-action="{{ route("dashboard.settings.phase.destroy", ["id" => $phase->id]) }}" data-method="delete"><i class="dropdown-icon fe fe-trash-2 text-danger"></i> Delete </a>
+                                                                            </div>
+                                                                        </div>
+                                                                    </td>
+                                                                </tr>
+                                                            @endforeach
+                                                        </tbody>
+                                                    </table>
+
+                                                </fieldset>
+                                            </div>
+                                        @endif
+
+                                        @if(auth()->user()->hasPermission("access_all_post_securities"))
+                                            <div class="tab-pane fade show active" id="v-pills-post-security" role="tabpanel"
+                                                 aria-labelledby="v-pills-post-security-tab">
+                                                <fieldset class="form-fieldset">
+
+                                                    <h4 class="font-weight-normal border-bottom pb-4">
+                                                        Post security
+                                                        <span class="triggerPostSecurityModal float-right mb-2 d-inline-block btn btn-sm btn-primary">Create New</span>
+                                                    </h4>
+
+                                                    <div class="modal fade postSecurityModal" tabindex="-1" role="dialog" aria-hidden="true">
+
+                                                        <div class="modal-dialog modal-dialog-centered" role="document">
+
+                                                            <div class="modal-content">
+
+                                                                <div class="modal-header">
+                                                                    <h5 class="modal-title" id="exampleModalLabel">Create new post security</h5>
+                                                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"></button>
+                                                                </div>
+
+                                                                <div class="modal-body">
+
+                                                                    <form class="postSecurityStore"
+                                                                          action="{{ route("dashboard.settings.post-security.store") }}"
+                                                                          method="post">
+                                                                        @csrf
+
+                                                                        <input type="hidden" name="post_security_id">
+
+                                                                        <label class="form-label">User role to be reviewed</label>
+                                                                        <select class="selectData" name="role_id_to_be_reviewed">
+                                                                            <option value=""></option>
+                                                                            @foreach ($userRoles as $userRole)
+                                                                                <option
+                                                                                    value="{{ $userRole->id }}"
+                                                                                    {{ (old("role_id_to_be_reviewed") == $userRole->id) ? "selected" : "" }}
+                                                                                >
+                                                                                    {{ ucfirst($userRole->name) }}
+                                                                                </option>
+                                                                            @endforeach
+                                                                        </select>
+
+                                                                        <label class="form-label mt-2">Select phases</label>
+                                                                        <select class="phasesSelect" multiple>
+                                                                            <option value=""></option>
+                                                                            @foreach ($phases as $phase)
+                                                                                <option
+                                                                                    value="{{ $phase->id }}">
+                                                                                    {{ $phase->name }}
+                                                                                </option>
+                                                                            @endforeach
+                                                                        </select>
+                                                                        <input type="hidden" name="phase_ids">
+
+                                                                        <div class="modal-footer pb-0">
+                                                                            <button type="button" class="btn btn-secondary"
+                                                                                    data-dismiss="modal">Close
+                                                                            </button>
+                                                                            <input type="submit" class="btn btn-primary"
+                                                                                   value="Submit">
+                                                                        </div>
+
+                                                                    </form>
+
+                                                                </div>
+
+                                                            </div>
+
+                                                        </div>
+
+                                                    </div>
+
+                                                    <table id="dttable" class="dttable table table-hover table-outline table-vcenter text-nowrap card-table">
+                                                        <thead>
+                                                            <tr>
+                                                                <th>To be reviewed</th>
+                                                                <th>Phases</th>
+                                                                <th>Actions</th>
+                                                            </tr>
+                                                        </thead>
+                                                        <tbody>
+                                                            @foreach($postSecurities as $postSecurity)
+                                                                <tr>
+                                                                    <td>{{ ucfirst($postSecurity->role->name) }}</td>
+                                                                    <td>{{ $postSecurity->phase_names }}</td>
+                                                                    <td class="text-center">
+                                                                        <div class="item-action dropdown">
+                                                                            <a href="javascript:void(0)" data-toggle="dropdown" class="icon" aria-expanded="false"><i class="fe fe-more-vertical"></i></a>
+                                                                            <div class="dropdown-menu dropdown-menu-right" x-placement="bottom-end" style="position: absolute; transform: translate3d(15px, 20px, 0px); top: 0px; left: 0px; will-change: transform;">
+                                                                                <a href="javascript:void(0)" data-post-security-id="{{ $postSecurity->id }}" data-post-security-role="{{ $postSecurity->role->id }}" data-post-security-phase-ids="{{ $postSecurity->phase_ids }}" class="triggerPostSecurityModal dropdown-item"><i class="dropdown-icon fe fe-edit"></i> Edit</a>
+                                                                                <a href="javascript:void(0)" class="actionLink dropdown-item" style="cursor: pointer;" data-action="{{ route("dashboard.settings.post-security.destroy", ["id" => $phase->id]) }}" data-method="delete"><i class="dropdown-icon fe fe-trash-2 text-danger"></i> Delete </a>
+                                                                            </div>
+                                                                        </div>
+                                                                    </td>
+                                                                </tr>
+                                                            @endforeach
+                                                        </tbody>
+                                                    </table>
+
+                                                </fieldset>
+                                            </div>
+                                        @endif
                                     </div>
                                 </div>
Index: routes/web.php
===================================================================
--- routes/web.php	(revision 1f059b0ad5b405fafb01af109c5029b4a81e55b0)
+++ routes/web.php	(revision d25ba6629ddc39867a49008948daa1cedd404fc4)
@@ -56,4 +56,5 @@
 	Route::get("/", "Dashboard\IndexController@index")->name("dashboard.index");
 
+	// Settings
 	Route::get("/settings", "Dashboard\SettingsController@settings")->name("dashboard.settings.index");
 	Route::patch("/settings/personal", "Dashboard\SettingsController@updatePersonalInformation")->name("dashboard.settings.personal");
@@ -64,4 +65,16 @@
 	Route::patch("/settings/email", "Dashboard\SettingsController@updateEmail")->name("dashboard.settings.email");
 	Route::post("/settings/transfer/", "Dashboard\SettingsController@transferPostsAndDeleteUser")->name("dashboard.settings.transfer");
+
+    // Settings => Phases
+    Route::post("/settings/phase/store", "Dashboard\SettingsController@phaseStore")->name("dashboard.settings.phase.store");
+    Route::delete("/settings/phase/{id}", "Dashboard\SettingsController@phaseDestroy")
+        ->name("dashboard.settings.phase.destroy")
+        ->middleware("permission:delete_phase");
+
+    // Settings => Post Security
+    Route::post("/settings/post-security/store", "Dashboard\SettingsController@postSecurityStore")->name("dashboard.settings.post-security.store");
+    Route::delete("/settings/post-security/{id}", "Dashboard\SettingsController@postSecurityDestroy")
+        ->name("dashboard.settings.post-security.destroy")
+        ->middleware("permission:delete_post_securities");
 
 	// Users
