| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | package iiimport (	"golib/features/mo")const (	UserName           = "name"	UserUserName       = "username"	UserFlag           = "flag"	UserIsSysadmin     = "isSysadmin"	UserCompanyDefault = "company_default"	UserGroup          = "group"	UserRole           = "role"	UserPerms          = "perms")// User 用户接口// 用户在登录成功后将所有信息(角色/权限)保存在 session 中, 当用户退出登录后需要清除 session// 用户权限发生变更时, 需要终端用户注销后重新登录即可type User struct {	Data mo.M}func (u *User) ID() mo.ObjectID {	oid, ok := u.Data[mo.ID.Key()].(mo.ObjectID)	if !ok {		panic("_id not found or dataType doesn't mo.ObjectID")	}	if oid.IsZero() {		panic("_id can not be Zero")	}	return oid}func (u *User) Name() string {	return u.getString(UserName)}func (u *User) UserName() string {	return u.getString(UserUserName)}func (u *User) Flag() bool {	flag, ok := u.Data[UserFlag].(bool)	if !ok {		return false	}	return flag}func (u *User) IsSysadmin() bool {	isSysadmin, ok := u.Data[UserIsSysadmin].(bool)	if !ok {		return false	}	return isSysadmin}func (u *User) Company() string {	return u.getString(UserCompanyDefault)}func (u *User) Group(name string) bool {	group, ok := u.Data[UserGroup].(mo.A)	if !ok {		return false	}	for _, g := range group {		if g == name {			return true		}	}	return false}func (u *User) Role(group string) (string, bool) {	role, ok := u.Data[UserRole].(mo.M)	if !ok {		return "", false	}	v, ok := role[group]	if !ok {		return "", false	}	return v.(string), true}func (u *User) Perms(group string) ([]string, bool) {	perms, ok := u.Data[UserPerms].(mo.M)	if !ok {		return nil, false	}	pm, ok := perms[group].(mo.A)	if !ok {		return nil, false	}	if len(pm) == 0 {		return nil, false	}	ps := make([]string, len(pm))	for i := 0; i < len(pm); i++ {		ps[i] = pm[i].(string)	}	return ps, true}func (u *User) getString(k string) string {	str, ok := u.Data[k].(string)	if !ok {		return ""	}	return str}// NewUser 创建用户接口, 仅在登录时初始化一次func NewUser(data mo.M) User {	return User{Data: data}}
 |