RE: CREATE USER Programmatically?
Kirk You da' man! Randy Engle, Director XC2 Software LLC – XC2LIVE! Internet – Hosted – In the Cloud: On-line Backflow Test Entry! XC2Live! - Backflow Program Management Operational Now! – Call for additional information: 800.761.4999 -Original Message- From: 4D_Tech <4d_tech-boun...@lists.4d.com> On Behalf Of Kirk Brooks via 4D_Tech Sent: Thursday, November 1, 2018 4:37 PM To: 4D iNug Technical <4d_tech@lists.4d.com> Cc: Kirk Brooks Subject: Re: CREATE USER Programmatically? Hey Randy, You're not a dope - it's a non-intuitive. I integrated my user system with the 4D system a couple of years ago. Allows me to keep the really fine-grained permissions they know and love while letting 4D sweat the login stuff. Plus gives me a *much* easier way to know who the user is within server side processes. Anyway here is the key method I use for synicing with the structure: // Method: User_set_4Dproperties (c-obj) -> text // $1 is c-obj of params // $0 is errMsg // Purpose: manage updating & creating users // $1 must have an 'action': update / create // created users are always Administrator owned // create action: *C_OBJECT*(*$1*) *C_TEXT*(*$0*;$errMsg) *C_LONGINT*($userID;$nbLogin;$groupOwner;$4DuserId) *C_TEXT*($name;$startup;$password;$action;$errMethod) *C_DATE*($lastLogin) $action:=*OB Get*(*$1*;"action") // everyone should have access to the plugins *ARRAY LONGINT*($aMembership;1) $aMembership{1}:=15002 // plugins *Error_install_handler *("err_log_only") *Case of * *: *($action="update") //note: password may be blank $4DuserId:=*OB Get*(*$1*;"4DuserId";Is longint) $password:=*OB Get*(*$1*;"password") $name:=*OB Get*(*$1*;"name") $startup:=*OB Get*(*$1*;"startupMethod") $nbLogin:=*OB Get*(*$1*;"numLogin";Is longint) $lastLogin:=*OB Get*(*$1*;"lastLogin";Is date) *Case of * *: *($name="") $errMsg:="The user name can not be blank." *: *($4DuserId=0) $errMethod:="The 4D user number is required for an update." *Else * // is this a new password? *Case of * *: *($password="") *: *(*Validate password*($4DuserId;$password)) // not changed *Else * // put a note on the user record *TABLE_SET_readWrite *(->*[USERS]*) *QUERY*(*[USERS]*;[USERS]db_userNumber=$4DuserId) *If *(*Not*(*RW_Locked *(->*[USERS]*;->$errMsg))) // clear the temp PW - if any [USERS]temp_pw:="" [USERS]temp_pw_dts:="" *NOTE_ADD_toField *(->[USERS]Notes;"Changed password";" - ") *UNLOAD RECORD*(*[USERS]*) *End if * *TABLE_RESTORE_readWrite *(->*[USERS]*;*True*) *End case * $4DuserId:=*Set user properties*($4DuserId;$name;$startup;$password;$nbLogin ;$lastLogin;$aMembership) *OB SET*(*$1*;"4DuserId";$4DuserId) *End case * *: *($action="create") & (*OB Get*(*$1*;"name")="") $errMsg:="No user name!" *: *($action="create") // created by Administrator *If *(*OB Is defined*(*$1*;"password")) $password:=*OB Get*(*$1*;"password") *Else * $errMsg:="Users must have a password." *End if * *If *($errMsg="") $name:=*OB Get*(*$1*;"name";Is text) $startup:=*OB Get*(*$1*;"startupMethod";Is text) $nbLogin:=0 $lastLogin:=!00-00-00! // note - if the native 4D user editor is open this will hang waiting for it to close $4DuserId:=*Set user properties*(-2;$name;$startup;$password;$nbLogin; $lastLogin;$aMembership) *If *(*error*#0) $errMsg:="The 4D user couldn't be created.\r" *If *(*error*=-9979) $errMsg:=$errMsg+" '"+$name+"' is already being used. Make a different name." *Else * $errMsg:=$errMsg+*4D_get_error_text *(*error*) *End if * *Else * *OB SET*(*$1*;"4DuserId";$4DuserId) *End if * *End if * *Else * $errMsg:="No valid action for the user update." *End case * *Error_install_handler * // *$0*:=$errMsg To create a new 4D user I call it like so: *C_OBJECT*($obj) *OB SET*($obj;"action";"create") *OB SET*($obj;"name";$name) *OB SET*($obj;"password";*Pass_generate_word *(5;2;1;0)) // temp PW $errMsg:=*User_set_4Dproperties *($obj) Be sure to take a look at USER TO BLOB and BLOB TO USERS as well. On Thu, Nov 1, 2018 at 3:48 PM Randy Engle via 4D_Tech <4d_tech@lists.4d.com> wrote: > I haven't used "4D Users" in a "long time" > > ( I roll my own user system...but 4D Users need it now) > > Maybe I'm being a dope (likely), but I'm not seeing a way to create > users programmatically. > > A shove in the right direction would b
Re: CREATE USER Programmatically?
Hey Randy, You're not a dope - it's a non-intuitive. I integrated my user system with the 4D system a couple of years ago. Allows me to keep the really fine-grained permissions they know and love while letting 4D sweat the login stuff. Plus gives me a *much* easier way to know who the user is within server side processes. Anyway here is the key method I use for synicing with the structure: // Method: User_set_4Dproperties (c-obj) -> text // $1 is c-obj of params // $0 is errMsg // Purpose: manage updating & creating users // $1 must have an 'action': update / create // created users are always Administrator owned // create action: *C_OBJECT*(*$1*) *C_TEXT*(*$0*;$errMsg) *C_LONGINT*($userID;$nbLogin;$groupOwner;$4DuserId) *C_TEXT*($name;$startup;$password;$action;$errMethod) *C_DATE*($lastLogin) $action:=*OB Get*(*$1*;"action") // everyone should have access to the plugins *ARRAY LONGINT*($aMembership;1) $aMembership{1}:=15002 // plugins *Error_install_handler *("err_log_only") *Case of * *: *($action="update") //note: password may be blank $4DuserId:=*OB Get*(*$1*;"4DuserId";Is longint) $password:=*OB Get*(*$1*;"password") $name:=*OB Get*(*$1*;"name") $startup:=*OB Get*(*$1*;"startupMethod") $nbLogin:=*OB Get*(*$1*;"numLogin";Is longint) $lastLogin:=*OB Get*(*$1*;"lastLogin";Is date) *Case of * *: *($name="") $errMsg:="The user name can not be blank." *: *($4DuserId=0) $errMethod:="The 4D user number is required for an update." *Else * // is this a new password? *Case of * *: *($password="") *: *(*Validate password*($4DuserId;$password)) // not changed *Else * // put a note on the user record *TABLE_SET_readWrite *(->*[USERS]*) *QUERY*(*[USERS]*;[USERS]db_userNumber=$4DuserId) *If *(*Not*(*RW_Locked *(->*[USERS]*;->$errMsg))) // clear the temp PW - if any [USERS]temp_pw:="" [USERS]temp_pw_dts:="" *NOTE_ADD_toField *(->[USERS]Notes;"Changed password";" - ") *UNLOAD RECORD*(*[USERS]*) *End if * *TABLE_RESTORE_readWrite *(->*[USERS]*;*True*) *End case * $4DuserId:=*Set user properties*($4DuserId;$name;$startup;$password;$nbLogin ;$lastLogin;$aMembership) *OB SET*(*$1*;"4DuserId";$4DuserId) *End case * *: *($action="create") & (*OB Get*(*$1*;"name")="") $errMsg:="No user name!" *: *($action="create") // created by Administrator *If *(*OB Is defined*(*$1*;"password")) $password:=*OB Get*(*$1*;"password") *Else * $errMsg:="Users must have a password." *End if * *If *($errMsg="") $name:=*OB Get*(*$1*;"name";Is text) $startup:=*OB Get*(*$1*;"startupMethod";Is text) $nbLogin:=0 $lastLogin:=!00-00-00! // note - if the native 4D user editor is open this will hang waiting for it to close $4DuserId:=*Set user properties*(-2;$name;$startup;$password;$nbLogin; $lastLogin;$aMembership) *If *(*error*#0) $errMsg:="The 4D user couldn't be created.\r" *If *(*error*=-9979) $errMsg:=$errMsg+" '"+$name+"' is already being used. Make a different name." *Else * $errMsg:=$errMsg+*4D_get_error_text *(*error*) *End if * *Else * *OB SET*(*$1*;"4DuserId";$4DuserId) *End if * *End if * *Else * $errMsg:="No valid action for the user update." *End case * *Error_install_handler * // *$0*:=$errMsg To create a new 4D user I call it like so: *C_OBJECT*($obj) *OB SET*($obj;"action";"create") *OB SET*($obj;"name";$name) *OB SET*($obj;"password";*Pass_generate_word *(5;2;1;0)) // temp PW $errMsg:=*User_set_4Dproperties *($obj) Be sure to take a look at USER TO BLOB and BLOB TO USERS as well. On Thu, Nov 1, 2018 at 3:48 PM Randy Engle via 4D_Tech <4d_tech@lists.4d.com> wrote: > I haven't used "4D Users" in a "long time" > > ( I roll my own user system...but 4D Users need it now) > > Maybe I'm being a dope (likely), but I'm not seeing a way to create users > programmatically. > > A shove in the right direction would be most appreciated. > > Gracious Thanks > > Randy Engle, Director > XC2 Software LLC – XC2LIVE! > > > > ** > 4D Internet Users Group (4D iNUG) > Archive: http://lists.4d.com/archives.html > Options: https://lists.4d.com/mailman/options/4d_tech > Unsub: mailto:4d_tech-unsubscr...@lists.4d.com > ** -- Kirk Brooks San Francisco, CA === *We go vote - they go home* ** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **
RE: CREATE USER Programmatically?
Take a look at: SET USER PROPERTIES http://doc.4d.com/4Dv16/4D/16.4/Set-user-properties.301-3979154.en.html -Tim ** 4D Internet Users Group (4D iNUG) Archive: http://lists.4d.com/archives.html Options: https://lists.4d.com/mailman/options/4d_tech Unsub: mailto:4d_tech-unsubscr...@lists.4d.com **