User Tools

Site Tools


software:dailydata:libraries:php_user

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
software:dailydata:libraries:php_user [2021/08/25 21:31]
rodolico
software:dailydata:libraries:php_user [2021/09/22 01:30] (current)
rodolico
Line 3: Line 3:
 I got frustrated trying to find a class or library to authenticate user logins in PHP. The ones I found were either too simplistic, or required me to "​join"​ some project just to have access to purportedly open source software. I got frustrated trying to find a class or library to authenticate user logins in PHP. The ones I found were either too simplistic, or required me to "​join"​ some project just to have access to purportedly open source software.
  
-So, I decided to dust off the neurons and see if I could build one. I decided to make it as flexible as possible, with only the very basics, but able to be enhanced via data calls. I also decided to make the data access independent of the class itself so data access classes could be (re)written for tasks other than MySQL using the mysqli library.+So, I decided to dust off the neurons and see if I could build one. I decided to make it as flexible as possible, with only the very basics, but able to be enhanced via data calls. I also decided to make the data access independent of the class itself so data access classes could be written for tasks other than MySQL using the mysqli library
 + 
 +Because of this, usersDataSource is an abstract class which can not be instantiated. Instead, you must extend the class, defining all of the abstract methods in the abstract. We've done this with the UsersDataSourceMySQLi class.
  
 By itself, the users class (with a data access class usersDataSource like the included UsersDataSourceMySQLi class) handles basic login/​logout/​editing functions. By itself, the users class (with a data access class usersDataSource like the included UsersDataSourceMySQLi class) handles basic login/​logout/​editing functions.
Line 18: Line 20:
 http://​svn.dailydata.net/​svn/​php_users/​trunk http://​svn.dailydata.net/​svn/​php_users/​trunk
 but I recommend NOT using that as I use trunk as my personal playground and will commit broken code to it regularly but I recommend NOT using that as I use trunk as my personal playground and will commit broken code to it regularly
 +
 +An extension of this basic class which adds boolean permissions is the [[software:​dailydata:​libraries:​php_user_permissions|UsersPermissions]] class. It is part of the same library.
  
 ==== Basic System ==== ==== Basic System ====
Line 26: Line 30:
 create or replace table _users ( create or replace table _users (
    ​_user_id ​   int unsigned not null auto_increment,​    ​_user_id ​   int unsigned not null auto_increment,​
-   ​login ​      ​varchar(64),​ +   ​login ​      ​varchar(64), ​/* the login name */ 
-   ​password ​   varchar(128),​ +   ​password ​   varchar(128), ​/* encrypted form of the password */ 
-   ​isAdmin ​    ​boolean DEFAULT 1, +   ​isAdmin ​    ​boolean DEFAULT 1, /* if true, user has full admin rights */ 
-   ​enabled ​    ​boolean DEFAULT 1,+   ​enabled ​    ​boolean DEFAULT 1, /* if false, user can not log in */
    ​primary key (_user_id)    ​primary key (_user_id)
 ); );
Line 39: Line 43:
   * users with enabled set to false (0) will not be able to log in   * users with enabled set to false (0) will not be able to log in
  
-NOTE: the usersDataSource ​class has a public function, buildTable, which will build the table, so installation involves simply calling that function.+NOTE: the usersDataSourceMySQLi ​class has a public function, buildTable, which will build the table, so installation involves simply calling that function ​if you are using that data source class.
  
 IMPORTANT: to allow the Users class to work with a wide variety of data types, it does no data access itself. It requires a data access class. IMPORTANT: to allow the Users class to work with a wide variety of data types, it does no data access itself. It requires a data access class.
Line 52: Line 56:
    ​include_once( '​Users.class.php'​ );    ​include_once( '​Users.class.php'​ );
    ​session_start();​    ​session_start();​
-   ​$connection = new usersDataSource+   ​$connection = new UsersDataSourceMySQLi
          null,          null,
          ​null, ​          ​null, ​
Line 75: Line 79:
 </​code>​ </​code>​
  
-This example is using the usersDataSource ​definition of  data access (included)+This example is using the UsersDataSourceMySQLi ​definition of  data access (included)
  
 If you run it the first time with <code php>​$connection->​buildTable( '​admin',​ '​admin'​ ); die;</​code>​ uncommented,​ it will build the table. Comment that line out on the next run and you will be presented with a login screen. If you run it the first time with <code php>​$connection->​buildTable( '​admin',​ '​admin'​ ); die;</​code>​ uncommented,​ it will build the table. Comment that line out on the next run and you will be presented with a login screen.
Line 140: Line 144:
  </​code>​  </​code>​
    
- Now, when we instantiate a new object of class Users AND class usersDataSource, we simply pass this array in.+ Now, when we instantiate a new object of class Users AND class UsersDataSourceMySQLi, we simply pass this array in.
    
  <​code php>  <​code php>
-    $connection = new usersDataSource+    $connection = new UsersDataSourceMySQLi
          null,          null,
          ​$customFields, ​          ​$customFields, ​
Line 212: Line 216:
 ==== usersDataSource ==== ==== usersDataSource ====
  
-This is our data access class. ​It really doesn'​t matter what it is calledthough I plan to call it the same when I add more data access objects.+This is our data access class. ​As stated earlier, ​it is an abstract classwith UsersDataSourceMySQLi a class built on it.
  
 This code accesses the data (duh), and is consistently called $connection in the Users class. The only requirement is that it must be able to implement the following functions This code accesses the data (duh), and is consistently called $connection in the Users class. The only requirement is that it must be able to implement the following functions
Line 226: Line 230:
 I separated this out from the Users class because not all programs need database access. For instance, the favorites_urls app uses file based storage, so by writing a new access class for it, we will hopefully be able to get the same functionality,​ but with a different storage back end. I separated this out from the Users class because not all programs need database access. For instance, the favorites_urls app uses file based storage, so by writing a new access class for it, we will hopefully be able to get the same functionality,​ but with a different storage back end.
  
-==== Future ==== 
-  * I think I have a way of making it match things like INPUT TYPE='​color'​ and INPUT TYPE='​email'​. I'm going to check that out. 
-  * This is only the initial part of this particular project. I now intend to extend both classes to allow boolean permissions which will be integrated into our new version of CAMP, giving very granular rights to users. It will be available as a second set of files in this repository and is planned for release by October 2021. 
  
software/dailydata/libraries/php_user.txt · Last modified: 2021/09/22 01:30 by rodolico