27 lines
1.3 KiB
Python
27 lines
1.3 KiB
Python
|
|
from uuid import uuid4
|
||
|
|
from app_new.extensions import db
|
||
|
|
from app_new.core.models import User, Role, Permission, RolePermission, UserPermission
|
||
|
|
from app_new.core.authorization import has_permission
|
||
|
|
|
||
|
|
def test_custom_role_permission_and_override(app):
|
||
|
|
with app.app_context():
|
||
|
|
slug = "custom_" + uuid4().hex[:8]
|
||
|
|
role = Role(slug=slug, name="Gestionnaire test", is_system=False)
|
||
|
|
permission = Permission(code="stock.test.view", name="Stock test", module="stock", action="view")
|
||
|
|
db.session.add_all([role, permission]); db.session.flush()
|
||
|
|
db.session.add(RolePermission(role_id=role.id, permission_id=permission.id, effect="allow"))
|
||
|
|
user = User(username="rbac_" + uuid4().hex[:8], email=uuid4().hex + "@test.local", full_name="RBAC", role=slug)
|
||
|
|
user.set_password("test-password-strong")
|
||
|
|
db.session.add(user); db.session.commit()
|
||
|
|
assert has_permission("stock.test.view", user)
|
||
|
|
assert not has_permission("stock.test.edit", user)
|
||
|
|
db.session.add(UserPermission(user_id=user.id, permission_id=permission.id, effect="deny"))
|
||
|
|
db.session.commit()
|
||
|
|
assert not has_permission("stock.test.view", user)
|
||
|
|
|
||
|
|
def test_admin_rbac_page_requires_authentication(client):
|
||
|
|
response = client.get("/admin/roles")
|
||
|
|
assert response.status_code == 302
|
||
|
|
assert "/auth/login" in response.location
|
||
|
|
|