Changeset 327 in code for trunk


Ignore:
Timestamp:
Jun 8, 2020, 8:30:09 PM (5 years ago)
Author:
delthas
Message:

Add an admin flag to users

This is preparatory work for letting some users access admin-exclusive
service commands, such as creating new users.

This adds a boolean admin flag to the User schema. Old users will stay
non-admin after the DB migration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/db.go

    r324 r327  
    1414        Username string
    1515        Password string // hashed
     16        Admin    bool
    1617}
    1718
     
    6263CREATE TABLE User (
    6364        username VARCHAR(255) PRIMARY KEY,
    64         password VARCHAR(255) NOT NULL
     65        password VARCHAR(255) NOT NULL,
     66        admin INTEGER NOT NULL DEFAULT 0
    6567);
    6668
     
    101103        "ALTER TABLE Network ADD COLUMN sasl_external_cert BLOB DEFAULT NULL",
    102104        "ALTER TABLE Network ADD COLUMN sasl_external_key BLOB DEFAULT NULL",
     105        "ALTER TABLE User ADD COLUMN admin INTEGER NOT NULL DEFAULT 0",
    103106}
    104107
     
    188191        defer db.lock.RUnlock()
    189192
    190         rows, err := db.db.Query("SELECT username, password FROM User")
     193        rows, err := db.db.Query("SELECT username, password, admin FROM User")
    191194        if err != nil {
    192195                return nil, err
     
    198201                var user User
    199202                var password *string
    200                 if err := rows.Scan(&user.Username, &password); err != nil {
     203                if err := rows.Scan(&user.Username, &password, &user.Admin); err != nil {
    201204                        return nil, err
    202205                }
     
    219222
    220223        var password *string
    221         row := db.db.QueryRow("SELECT password FROM User WHERE username = ?", username)
    222         if err := row.Scan(&password); err != nil {
     224        row := db.db.QueryRow("SELECT password, admin FROM User WHERE username = ?", username)
     225        if err := row.Scan(&password, &user.Admin); err != nil {
    223226                return nil, err
    224227        }
     
    235238        var err error
    236239        if user.Created {
    237                 _, err = db.db.Exec("UPDATE User SET password = ? WHERE username = ?",
    238                         password, user.Username)
     240                _, err = db.db.Exec("UPDATE User SET password = ?, admin = ? WHERE username = ?",
     241                        password, user.Admin, user.Username)
    239242        } else {
    240                 _, err = db.db.Exec("INSERT INTO User(username, password) VALUES (?, ?)",
    241                         user.Username, password)
     243                _, err = db.db.Exec("INSERT INTO User(username, password, admin) VALUES (?, ?, ?)",
     244                        user.Username, password, user.Admin)
    242245                if err == nil {
    243246                        user.Created = true
Note: See TracChangeset for help on using the changeset viewer.