@ -181,102 +181,13 @@ func SetNX(key string, value interface{}, expiration time.Duration) (bool, error
return Client . SetNX ( Ctx , key , value , expiration ) . Result ( )
return Client . SetNX ( Ctx , key , value , expiration ) . Result ( )
}
}
// ==================== 权限缓存相关 ====================
// ==================== 用户缓存 ====================
// PermKey 生成权限缓存key
func PermKey ( userID , orgID , resource , action string ) string {
if orgID == "" {
return fmt . Sprintf ( "perm:%s:%s:%s" , userID , resource , action )
}
return fmt . Sprintf ( "perm:%s:%s:%s:%s" , userID , orgID , resource , action )
}
// SetPermission 缓存权限结果
func SetPermission ( userID , orgID , resource , action string , allowed bool , expiration time . Duration ) error {
key := PermKey ( userID , orgID , resource , action )
value := "deny"
if allowed {
value = "allow"
}
return Set ( key , value , expiration )
}
// GetPermission 获取缓存的权限结果
func GetPermission ( userID , orgID , resource , action string ) ( allowed bool , cached bool , err error ) {
key := PermKey ( userID , orgID , resource , action )
value , err := Get ( key )
if err != nil {
if err == redis . Nil {
return false , false , nil
}
return false , false , err
}
return value == "allow" , true , nil
}
// DeletePermission 删除权限缓存
func DeletePermission ( userID , orgID , resource , action string ) error {
key := PermKey ( userID , orgID , resource , action )
return Delete ( key )
}
// DeleteUserPermissions 删除用户的所有权限缓存
func DeleteUserPermissions ( userID string ) error {
if ! IsEnabled ( ) {
return nil
}
pattern := fmt . Sprintf ( "perm:%s:*" , userID )
return deleteByPattern ( pattern )
}
// DeleteOrgPermissions 删除组织的所有权限缓存
func DeleteOrgPermissions ( orgID string ) error {
if ! IsEnabled ( ) {
return nil
}
pattern := fmt . Sprintf ( "perm:*:%s:*" , orgID )
return deleteByPattern ( pattern )
}
// deleteByPattern 根据pattern删除key
func deleteByPattern ( pattern string ) error {
iter := Client . Scan ( Ctx , 0 , pattern , 0 ) . Iterator ( )
var keys [ ] string
for iter . Next ( Ctx ) {
keys = append ( keys , iter . Val ( ) )
if len ( keys ) >= 100 {
if err := Delete ( keys ... ) ; err != nil {
return err
}
keys = keys [ : 0 ]
}
}
if err := iter . Err ( ) ; err != nil {
return err
}
if len ( keys ) > 0 {
return Delete ( keys ... )
}
return nil
}
// ==================== 用户/组织缓存 ====================
// UserKey 用户缓存key
// UserKey 用户缓存key
func UserKey ( userID string ) string {
func UserKey ( userID string ) string {
return fmt . Sprintf ( "user:%s" , userID )
return fmt . Sprintf ( "user:%s" , userID )
}
}
// OrgKey 组织缓存key
func OrgKey ( orgID string ) string {
return fmt . Sprintf ( "org:%s" , orgID )
}
// OrgMemberKey 组织成员缓存key
func OrgMemberKey ( orgID , userID string ) string {
return fmt . Sprintf ( "org:%s:member:%s" , orgID , userID )
}
// ==================== Token黑名单 ====================
// ==================== Token黑名单 ====================
// TokenBlacklistKey Token黑名单key
// TokenBlacklistKey Token黑名单key