Cara Menambahkan Hak Akses | Login Python Flask

    Untuk menambahkan tiga hak akses dan peran ke aplikasi Flask Anda, kita perlu menambahkan beberapa fungsi baru untuk memeriksa hak akses pengguna berdasarkan peran mereka. Berikut adalah langkah-langkah untuk menambahkan hak akses ini:



Baca juga: LOGIN DENGAN PYTHON FLASK TANPA MySQL??? Yuk simak caranya untuk pemula!!!




1. Tambahkan Peran ke Data Pengguna

Tambahkan informasi peran ke dalam data pengguna di app.py.

from flask import Flask, render_template, request, redirect, url_for, flash, session

from werkzeug.security import generate_password_hash, check_password_hash

 

app = Flask(__name__)

app.secret_key = 'your_secret_key'

 

# Dummy user data with roles

users = {

    "admin": {"password": generate_password_hash("password123"), "role": "role1"},

    "user1": {"password": generate_password_hash("password123"), "role": "role2"},

    "user2": {"password": generate_password_hash("password123"), "role": "role3"}

}

 

# Access control mapping

access_control = {

    "role1": ["page1", "page2", "page3"],

    "role2": ["page2", "page3"],

    "role3": ["page2"]

}

 

def check_access(role, page):

    return page in access_control.get(role, [])

 

@app.route('/')

def home():

    if 'username' in session:

        return render_template('home.html', username=session['username'], access_control=access_control)

    return redirect(url_for('login'))

 

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        username = request.form['username']

        password = request.form['password']

       

        user = users.get(username)

        if user and check_password_hash(user['password'], password):

            session['username'] = username

            session['role'] = user['role']

            flash('Login successful!')

            return redirect(url_for('home'))

        else:

            flash('Invalid username or password')

 

    return render_template('login.html')

 

@app.route('/logout')

def logout():

    session.pop('username', None)

    session.pop('role', None)

    flash('You have been logged out.')

    return redirect(url_for('login'))

 

@app.route('/page1')

def page1():

    if 'username' in session and check_access(session['role'], 'page1'):

        return render_template('page1.html')

    else:

        flash('Access denied.')

        return redirect(url_for('home'))

 

@app.route('/page2')

def page2():

    if 'username' in session and check_access(session['role'], 'page2'):

        return render_template('page2.html')

    else:

        flash('Access denied.')

        return redirect(url_for('home'))

 

@app.route('/page3')

def page3():

    if 'username' in session and check_access(session['role'], 'page3'):

        return render_template('page3.html')

    else:

        flash('Access denied.')

        return redirect(url_for('home'))

 

if __name__ == '__main__':

    app.run(debug=True)

 

2. Update home.html untuk Menyertakan Tautan Berdasarkan Peran

Ubah template home.html untuk menampilkan tautan berdasarkan peran pengguna.


Baca juga: Menambahkan Beberapa Link pada halaman | Python Flask


templates/home.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Home</title>

    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">

</head>

<body>

    <div class="container">

        <h1>Welcome, {{ username }}!</h1>

        <ul>

            {% if 'page1' in access_control[session['role']] %}

                <li><a href="{{ url_for('page1') }}">Page 1</a></li>

            {% endif %}

            {% if 'page2' in access_control[session['role']] %}

                <li><a href="{{ url_for('page2') }}">Page 2</a></li>

            {% endif %}

            {% if 'page3' in access_control[session['role']] %}

                <li><a href="{{ url_for('page3') }}">Page 3</a></li>

            {% endif %}

        </ul>

        <a href="{{ url_for('logout') }}">Logout</a>

    </div>

</body>

</html>

    Dengan menambahkan variabel access_control ke konteks render_template, template home.html sekarang dapat mengakses variabel tersebut.

 

3. Jalankan Ulang Aplikasi

Jalankan kembali aplikasi Flask Anda dengan perintah berikut:

python app.py



 Baca juga: Cara Menambahkan CSS Python Flask


    Sekarang, saat pengguna login, mereka hanya akan melihat tautan ke halaman yang diizinkan berdasarkan peran mereka, dan mereka hanya dapat mengakses halaman-halaman tersebut sesuai dengan hak akses yang diberikan. Jika pengguna mencoba mengakses halaman yang tidak diizinkan, mereka akan diarahkan kembali ke halaman utama dengan pesan "Access denied".

Komentar