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
Posting Komentar