--- title: "shinymanager : SQLite Admin" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{shinymanager : SQLite Admin} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Introduction Using SQL database protected (``create_db()``), an admin mode is available to manage access to the application, features included are * manage users account : add, modify and delete users * ask the user to change his password * see logs about application usage ```r # Credentials data credentials <- data.frame( user = c("shiny", "shinymanager"), password = c("azerty", "12345"), # password will automatically be hashed admin = c(FALSE, TRUE), stringsAsFactors = FALSE ) # you can use keyring package to set database key library(keyring) key_set("R-shinymanager-key", "obiwankenobi") # Init the database create_db( credentials_data = credentials, sqlite_path = "path/to/database.sqlite", # will be created passphrase = key_get("R-shinymanager-key", "obiwankenobi") # passphrase = "passphrase_wihtout_keyring" ) # Wrap your UI with secure_app, enabled admin mode or not ui <- secure_app(ui, enable_admin = TRUE) server <- function(input, output, session) { # check_credentials directly on sqlite db res_auth <- secure_server( check_credentials = check_credentials( "path/to/database.sqlite", passphrase = key_get("R-shinymanager-key", "obiwankenobi") # passphrase = "passphrase_wihtout_keyring" ) ) output$auth_output <- renderPrint({ reactiveValuesToList(res_auth) }) # your classic server logic ... } ``` Starting page of the application will be : ![](../man/figures/shinymanager-login.png){width=100%} Once logged, the application will be launched and a button added to navigate between the app and the admin panel (if user is authorized to access it), and to logout from the application : ![](../man/figures/shinymanager-info-nav.png){width=100%} ## Admin mode ![](../man/figures/shinymanager-admin.png){width=100%} ### Manage users The first table lists all current users : ![](../man/figures/user_table.png){width=100%} A user is defined (at least) by the following information : - **User** : username - **Start** & **Expire** : optional dates of validity. If missing, access is not restricted to a specific period - **Admin** : user as administrator ? (``TRUE`` / ``FALSE``) #### Add user ![](../man/figures/add_user.png){width=100%} Using **Add user** button. So you can edit user information in the modal box : ![](../man/figures/popup.png){width=50%} Notes : - **User** : Canno't create existing user - **Start & Expire** : Keep empty for no restriction - **Password** : By defaut, a temporary password is generated. But you can put your own password and disable asking user to change it on first connexion. ![](../man/figures/shinymanager-pwd.png){width=100%} Finally, the creation is effective clicking on validation button. ### Edit current user It's possible to edit user information clicking on the blue ``button`` on the table. #### Remove a user You can remove one user using red ``button`` on table. #### Password management The second table allows password management : ![](../man/figures/password_table.png){width=100%} - **Change password button :** Ask user to change password on next connexion - **Reset password button :** If needed, a nex temporary password is generated. You have to give it to the user. Moreover, by defaut, the module uses some security rules : - at least 6 character - one number, one uppercase, one lowercase Additive information : - **Must change** : The user have to change his password - **Have changed** : The user already changed his password - **Date change** : Password updated date ### Logs You can visualize and download connexion logs on the second tab. ![](../man/figures/shinymanager-logs.png){width=100%}