| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | 
							- package ii
 
- import (
 
- 	"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}
 
- }
 
 
  |