46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
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
|
|
} |