implement access rights for view models

This commit is contained in:
manuel 2022-08-16 00:17:35 +02:00
parent 5e5b3571f9
commit c0291efa28
6 changed files with 11 additions and 9 deletions

View File

@ -20,7 +20,6 @@ futures = "0.3.21"
serde = "1.0.136" serde = "1.0.136"
serde_json = "1.0.79" serde_json = "1.0.79"
serde_derive = "1.0.136" serde_derive = "1.0.136"
quote = "1.0"
sea-orm = { version = "^0.9.1", features = [ "sqlx-sqlite", "runtime-actix-native-tls", "macros" ], default-features = true } sea-orm = { version = "^0.9.1", features = [ "sqlx-sqlite", "runtime-actix-native-tls", "macros" ], default-features = true }
syn = "1.0.91" syn = "1.0.91"

View File

@ -96,7 +96,7 @@ pub async fn login<T: AppDataTrait>(data: web::Data<T>) -> HttpResponse {
pub async fn logout(session: Session) -> HttpResponse { pub async fn logout(session: Session) -> HttpResponse {
session.remove("user_info"); session.remove("user_info");
HttpResponse::Found() HttpResponse::Found()
.append_header((header::LOCATION, "/".to_string())) .append_header((header::LOCATION, "/admin/".to_string()))
.finish() .finish()
} }
@ -155,5 +155,5 @@ pub async fn auth<T: AppDataTrait>(
session.insert("user_info", &user_info).unwrap(); session.insert("user_info", &user_info).unwrap();
HttpResponse::Found().append_header(("location", "/")).finish() HttpResponse::Found().append_header(("location", "/admin/")).finish()
} }

View File

@ -2,7 +2,7 @@ use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use actix_admin::prelude::*; use actix_admin::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize, DeriveActixAdminModel)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize, DeriveActixAdmin, DeriveActixAdminModel, DeriveActixAdminViewModel, DeriveActixAdminViewModelAccess)]
#[sea_orm(table_name = "comment")] #[sea_orm(table_name = "comment")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]

View File

@ -5,7 +5,7 @@ use std::fmt;
use std::fmt::Display; use std::fmt::Display;
use std::str::FromStr; use std::str::FromStr;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize, DeriveActixAdminModel)] #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Deserialize, Serialize, DeriveActixAdmin, DeriveActixAdminViewModel, DeriveActixAdminModel, DeriveActixAdminViewModelAccess)]
#[sea_orm(table_name = "post")] #[sea_orm(table_name = "post")]
pub struct Model { pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]

View File

@ -14,7 +14,7 @@ use tera::{Context, Tera};
mod entity; mod entity;
use entity::{Post, Comment}; use entity::{Post, Comment};
#[derive(Debug, Clone)] #[derive(Clone)]
pub struct AppState { pub struct AppState {
pub oauth: BasicClient, pub oauth: BasicClient,
pub tmpl: Tera, pub tmpl: Tera,
@ -57,7 +57,10 @@ fn create_actix_admin_builder() -> ActixAdminBuilder {
let configuration = ActixAdminConfiguration { let configuration = ActixAdminConfiguration {
enable_auth: true, enable_auth: true,
user_is_logged_in: Some(|session: Session| -> bool { session.get::<UserInfo>("user_info").unwrap().is_some() }), user_is_logged_in: Some(|session: &Session| -> bool {
let user_info = session.get::<UserInfo>("user_info").unwrap();
user_info.is_some()
}),
login_link: "/azure-auth/login".to_string(), login_link: "/azure-auth/login".to_string(),
logout_link: "/azure-auth/logout".to_string() logout_link: "/azure-auth/logout".to_string()
}; };
@ -112,10 +115,11 @@ async fn main() {
actix_admin: actix_admin, actix_admin: actix_admin,
}; };
let cookie_secret_key = Key::generate();
HttpServer::new(move || { HttpServer::new(move || {
App::new() App::new()
.app_data(web::Data::new(app_state.clone())) .app_data(web::Data::new(app_state.clone()))
.wrap(SessionMiddleware::new(CookieSessionStore::default(), Key::generate())) .wrap(SessionMiddleware::new(CookieSessionStore::default(), cookie_secret_key.clone()))
.route("/", web::get().to(index)) .route("/", web::get().to(index))
.service(azure_auth.clone().create_scope::<AppState>()) .service(azure_auth.clone().create_scope::<AppState>())
.service( .service(

View File

@ -2,7 +2,6 @@
{% block content %} {% block content %}
<ul> <ul>
<li><a href="/{{ web_auth_link }}">Auth-Example</a></li>
<li><a href="/admin/">Actix-Admin</a></li> <li><a href="/admin/">Actix-Admin</a></li>
</ul> </ul>
{% endblock content %} {% endblock content %}