qq_bot/auth/auth.go

57 lines
1.2 KiB
Go

package auth
import (
"strconv"
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/model"
"git.lxtend.com/qqbot/sqlite3"
)
func init() {
authTableCreateSQL := `
CREATE TABLE IF NOT EXISTS auth (
id INTEGER PRIMARY KEY AUTOINCREMENT,
qqid TEXT UNIQUE,
role INTEGER
);
`
sqlite3.TryCreateTable(authTableCreateSQL)
}
func HasPermission(qqID int64, level constants.PermissionLevel) bool {
auth, err := getAuth(qqID)
maxRetry := 50
for i := 0; i < maxRetry && (err != nil); i++ {
auth, err = getAuth(qqID)
}
if err != nil || auth.Qqid == "" {
return false
}
return auth.Role <= level
}
func SetPermission(qqID int64, level constants.PermissionLevel) error {
auth := Auth{
Qqid: strconv.Itoa(int(qqID)),
Role: level,
}
return setAuth(auth)
}
func TryExecHandler(msg model.Message, level constants.PermissionLevel, handler model.Handler) (reply *model.Reply) {
if permission, err := getAuth(msg.UserId); err == nil {
if permission.Role == constants.LEVEL_IGNORE {
return nil
}
}
if HasPermission(msg.UserId, level) {
return handler(msg)
}
return &model.Reply{
ReplyMsg: "权限校验错误",
ReferOriginMsg: true,
FromMsg: msg,
}
}