user feature restriction supports application settings syncing
This commit is contained in:
@@ -236,6 +236,7 @@ max_user_avatar_size = 1048576
|
|||||||
# 9: Import Transactions
|
# 9: Import Transactions
|
||||||
# 10: Export Transactions
|
# 10: Export Transactions
|
||||||
# 11: Clear All Data
|
# 11: Clear All Data
|
||||||
|
# 12: Sync Application Settings
|
||||||
default_feature_restrictions =
|
default_feature_restrictions =
|
||||||
|
|
||||||
[data]
|
[data]
|
||||||
|
|||||||
@@ -14,12 +14,14 @@ import (
|
|||||||
// UserApplicationCloudSettingsApi represents user application cloud settings api
|
// UserApplicationCloudSettingsApi represents user application cloud settings api
|
||||||
type UserApplicationCloudSettingsApi struct {
|
type UserApplicationCloudSettingsApi struct {
|
||||||
userAppCloudSettings *services.UserApplicationCloudSettingsService
|
userAppCloudSettings *services.UserApplicationCloudSettingsService
|
||||||
|
users *services.UserService
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize a user application cloud settings api singleton instance
|
// Initialize a user application cloud settings api singleton instance
|
||||||
var (
|
var (
|
||||||
UserApplicationCloudSettings = &UserApplicationCloudSettingsApi{
|
UserApplicationCloudSettings = &UserApplicationCloudSettingsApi{
|
||||||
userAppCloudSettings: services.UserApplicationCloudSettings,
|
userAppCloudSettings: services.UserApplicationCloudSettings,
|
||||||
|
users: services.Users,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -58,6 +60,20 @@ func (a *UserApplicationCloudSettingsApi) ApplicationSettingsUpdateHandler(c *co
|
|||||||
}
|
}
|
||||||
|
|
||||||
uid := c.GetCurrentUid()
|
uid := c.GetCurrentUid()
|
||||||
|
user, err := a.users.GetUserById(c, uid)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if !errs.IsCustomError(err) {
|
||||||
|
log.Warnf(c, "[user_app_cloud_settings.ApplicationSettingsUpdateHandler] failed to get user for user \"uid:%d\", because %s", uid, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, errs.ErrUserNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.FeatureRestriction.Contains(core.USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS) {
|
||||||
|
return false, errs.ErrNotPermittedToPerformThisAction
|
||||||
|
}
|
||||||
|
|
||||||
userApplicationCloudSettings, err := a.userAppCloudSettings.GetUserApplicationCloudSettingsByUid(c, uid)
|
userApplicationCloudSettings, err := a.userAppCloudSettings.GetUserApplicationCloudSettingsByUid(c, uid)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -179,8 +195,21 @@ func (a *UserApplicationCloudSettingsApi) ApplicationSettingsUpdateHandler(c *co
|
|||||||
// ApplicationSettingsDisableHandler disabled user application cloud settings by request parameters for current user
|
// ApplicationSettingsDisableHandler disabled user application cloud settings by request parameters for current user
|
||||||
func (a *UserApplicationCloudSettingsApi) ApplicationSettingsDisableHandler(c *core.WebContext) (any, *errs.Error) {
|
func (a *UserApplicationCloudSettingsApi) ApplicationSettingsDisableHandler(c *core.WebContext) (any, *errs.Error) {
|
||||||
uid := c.GetCurrentUid()
|
uid := c.GetCurrentUid()
|
||||||
|
user, err := a.users.GetUserById(c, uid)
|
||||||
|
|
||||||
err := a.userAppCloudSettings.ClearUserApplicationCloudSettings(c, uid)
|
if err != nil {
|
||||||
|
if !errs.IsCustomError(err) {
|
||||||
|
log.Warnf(c, "[user_app_cloud_settings.ApplicationSettingsDisableHandler] failed to get user for user \"uid:%d\", because %s", uid, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, errs.ErrUserNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.FeatureRestriction.Contains(core.USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS) {
|
||||||
|
return false, errs.ErrNotPermittedToPerformThisAction
|
||||||
|
}
|
||||||
|
|
||||||
|
err = a.userAppCloudSettings.ClearUserApplicationCloudSettings(c, uid)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf(c, "[user_app_cloud_settings.ApplicationSettingsDisableHandler] failed to clear user application cloud settings for user \"uid:%d\", because %s", uid, err.Error())
|
log.Errorf(c, "[user_app_cloud_settings.ApplicationSettingsDisableHandler] failed to clear user application cloud settings for user \"uid:%d\", because %s", uid, err.Error())
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ func (r UserFeatureRestrictions) Contains(featureRestrictionType UserFeatureRest
|
|||||||
func (r UserFeatureRestrictions) String() string {
|
func (r UserFeatureRestrictions) String() string {
|
||||||
builder := strings.Builder{}
|
builder := strings.Builder{}
|
||||||
|
|
||||||
for restrictionType := USER_FEATURE_RESTRICTION_TYPE_UPDATE_PASSWORD; restrictionType <= USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA; restrictionType++ {
|
for restrictionType := userFeatureRestrictionTypeMinValue; restrictionType <= userFeatureRestrictionTypeMaxValue; restrictionType++ {
|
||||||
if !r.Contains(restrictionType) {
|
if !r.Contains(restrictionType) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ func ParseUserFeatureRestrictions(featureRestrictions string) UserFeatureRestric
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if uint64(USER_FEATURE_RESTRICTION_TYPE_UPDATE_PASSWORD) <= uint64(value) && uint64(value) <= uint64(USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA) {
|
if uint64(userFeatureRestrictionTypeMinValue) <= uint64(value) && uint64(value) <= uint64(userFeatureRestrictionTypeMaxValue) {
|
||||||
typeValue := uint64(1 << (value - 1))
|
typeValue := uint64(1 << (value - 1))
|
||||||
restrictions = restrictions | typeValue
|
restrictions = restrictions | typeValue
|
||||||
}
|
}
|
||||||
@@ -87,8 +87,12 @@ const (
|
|||||||
USER_FEATURE_RESTRICTION_TYPE_IMPORT_TRANSACTION UserFeatureRestrictionType = 9
|
USER_FEATURE_RESTRICTION_TYPE_IMPORT_TRANSACTION UserFeatureRestrictionType = 9
|
||||||
USER_FEATURE_RESTRICTION_TYPE_EXPORT_TRANSACTION UserFeatureRestrictionType = 10
|
USER_FEATURE_RESTRICTION_TYPE_EXPORT_TRANSACTION UserFeatureRestrictionType = 10
|
||||||
USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA UserFeatureRestrictionType = 11
|
USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA UserFeatureRestrictionType = 11
|
||||||
|
USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS UserFeatureRestrictionType = 12
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const userFeatureRestrictionTypeMinValue UserFeatureRestrictionType = USER_FEATURE_RESTRICTION_TYPE_UPDATE_PASSWORD
|
||||||
|
const userFeatureRestrictionTypeMaxValue UserFeatureRestrictionType = USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS
|
||||||
|
|
||||||
// String returns a textual representation of the restriction type of user features
|
// String returns a textual representation of the restriction type of user features
|
||||||
func (t UserFeatureRestrictionType) String() string {
|
func (t UserFeatureRestrictionType) String() string {
|
||||||
switch t {
|
switch t {
|
||||||
@@ -114,6 +118,8 @@ func (t UserFeatureRestrictionType) String() string {
|
|||||||
return "Export Transactions"
|
return "Export Transactions"
|
||||||
case USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA:
|
case USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA:
|
||||||
return "Clear All Data"
|
return "Clear All Data"
|
||||||
|
case USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS:
|
||||||
|
return "Sync Application Settings"
|
||||||
default:
|
default:
|
||||||
return fmt.Sprintf("Invalid(%d)", int(t))
|
return fmt.Sprintf("Invalid(%d)", int(t))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ func TestUserFeatureRestrictionsString(t *testing.T) {
|
|||||||
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_IMPORT_TRANSACTION)
|
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_IMPORT_TRANSACTION)
|
||||||
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_EXPORT_TRANSACTION)
|
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_EXPORT_TRANSACTION)
|
||||||
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA)
|
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_CLEAR_ALL_DATA)
|
||||||
|
featureRestrictions = featureRestrictions.Add(USER_FEATURE_RESTRICTION_TYPE_SYNC_APPLICATION_SETTINGS)
|
||||||
expectedValue = "Update Password," +
|
expectedValue = "Update Password," +
|
||||||
"Update Email," +
|
"Update Email," +
|
||||||
"Update Profile Basic Info," +
|
"Update Profile Basic Info," +
|
||||||
@@ -90,7 +91,8 @@ func TestUserFeatureRestrictionsString(t *testing.T) {
|
|||||||
"Forget Password," +
|
"Forget Password," +
|
||||||
"Import Transactions," +
|
"Import Transactions," +
|
||||||
"Export Transactions," +
|
"Export Transactions," +
|
||||||
"Clear All Data"
|
"Clear All Data," +
|
||||||
|
"Sync Application Settings"
|
||||||
actualValue = featureRestrictions.String()
|
actualValue = featureRestrictions.String()
|
||||||
assert.Equal(t, expectedValue, actualValue)
|
assert.Equal(t, expectedValue, actualValue)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user