package models import "database/sql" type BoardPermission struct { UserID int BoardID int Permissions int64 } func GetBoardPermission(db *sql.DB, userID, boardID int) (*BoardPermission, error) { query := "SELECT user_id, board_id, permissions FROM board_permissions WHERE user_id = ? AND board_id = ?" row := db.QueryRow(query, userID, boardID) bp := &BoardPermission{} err := row.Scan(&bp.UserID, &bp.BoardID, &bp.Permissions) if err == sql.ErrNoRows { return nil, nil } if err != nil { return nil, err } return bp, nil } func SetBoardPermission(db *sql.DB, bp BoardPermission) error { query := "INSERT INTO board_permissions (user_id, board_id, permissions) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE permissions = ?" _, err := db.Exec(query, bp.UserID, bp.BoardID, bp.Permissions, bp.Permissions) return err } const ( PermPostInBoard int64 = 1 << 0 PermModerateBoard int64 = 1 << 1 PermViewBoard int64 = 1 << 2 ) func HasBoardPermission(db *sql.DB, userID, boardID int, perm int64) (bool, error) { bp, err := GetBoardPermission(db, userID, boardID) if err != nil { return false, err } if bp == nil { return false, nil } return bp.Permissions&perm != 0, nil }