entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

login con privilegios de usuario en android studio

soy nuevo en esto del desarrollo Móvil, Busco Ayuda Para realizar un login con niveles de usuario y dependiendo de ello se activen o oculten ciertos items de mi menú circle les agradecería algún ejemplo o idea de como hacerlo por favor.

aqui codigo------

public class MainActivity extends AppCompatActivity {

    CircleMenu circleMenu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        circleMenu = (CircleMenu) findViewById(R.id.circle_menu);

        circleMenu.setMainMenu(Color.parseColor("#80CDCDCD"), R.mipmap.locodi, R.mipmap.icon_cancel);
        circleMenu
                .addSubMenu(Color.parseColor("#80258CFF"), R.mipmap.web)
                .addSubMenu(Color.parseColor("#8030A400"), R.mipmap.dashboard)
                .addSubMenu(Color.parseColor("#80FF4B32"), R.mipmap.mapsblanco)
                .addSubMenu(Color.parseColor("#808A39FF"), R.mipmap.ajustes)
                .addSubMenu(Color.parseColor("#80FF6A00"), R.mipmap.sha);

        circleMenu.setOnMenuSelectedListener(new OnMenuSelectedListener() {

                                                 @Override
                                                 public void onMenuSelected(int index) {
                                                     switch (index) {
                                                         case 0:
                                                             Toast.makeText(MainActivity.this, "Bienvenido a Pagina Web", Toast.LENGTH_SHORT).show();

                                                             startActivity(new Intent(MainActivity.this, Codinamex.class));

                                                             break;

                                                         case 1:
                                                             Toast.makeText(MainActivity.this, "Bienvenido a Dashboard", Toast.LENGTH_SHORT).show();
                                                             startActivity(new Intent(MainActivity.this, CodinamexDashboard.class));
                                                             break;
                                                         case 2:
                                                             Toast.makeText(MainActivity.this, "Bienvenido a Gps", Toast.LENGTH_SHORT).show();
                                                             startActivity(new Intent(MainActivity.this, MapsActivity.class));
                                                             break;
                                                         case 3:
                                                             Toast.makeText(MainActivity.this, "Bienvenido a Configuracion", Toast.LENGTH_SHORT).show();
                                                             startActivity(new Intent(MainActivity.this, ConfUserActivity.class));
                                                             break;
                                                         case 4:
                                                             Toast.makeText(MainActivity.this, "Bienvenido a Registro de Incidentes", Toast.LENGTH_SHORT).show();
                                                             startActivity(new Intent(MainActivity.this, Sha.class));
                                                             break;
                                                     }
                                                 }
                                             }

        );

        circleMenu.setOnMenuStatusChangeListener(new OnMenuStatusChangeListener() {

                                                     @Override
                                                     public void onMenuOpened() {

                                                     }

                                                     @Override
                                                     public void onMenuClosed() {

                                                     }
                                                 }
        );
    }

    @Override
    public void onBackPressed() {
        if (circleMenu.isOpened())
            circleMenu.closeMenu();
        else
            finish();
    }

}

1 Respuesta

1voto

Th3Mik3s Puntos2950

Con poco contexto te puedo decir lo siguiente:

En tu servicio:

Objeto Usuario

public class Usuario {
  private Long idUsuario;
  private String usuario;
  private String clave;
  private String token;
  private List<Modulo> modulos;
/* setters, getters, equal, hashcode */
}

Objeto Modulo

public class Modulo{
  private Integer idModulo;
  private String descripcion;
  /*Color.parseColor("#80258CFF"), R.mipmap.web*/
  private String color; //El valor del color
  private String ruta; //El valor que asignas al mipmap
}

Cuando inicies sesión y tu objeto de usuario llevará el listado de lo permitido, sólo te toca recorrer e ir asignando

...
circleMenu.addSubMenu(valores de la lista);
...

Es la idea que puedo darte con la poca información que nos das

0voto

Jair19 comentado

mira Th3Mik3s si quieres te puedo compartir mi proyecto para que me puedas ayudar pasame tu correo electrónico por favor.

0voto

Peter comentado

@Jair19 Mejor contesta con los detalles necesarios para solucionarlo aquí y así la solución le sirve a otros usuarios.

1voto

Th3Mik3s comentado

Saludos, así @Jair19 así la información / respuesta es de dominio público.

0voto

Jair19 comentado

esta es mi tabla

CREATE TABLE `member` (
  `user_id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `full_name` varchar(50) NOT NULL,
  `password_hash` varchar(256) NOT NULL,
  `salt` varchar(256) NOT NULL,
  `created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

0voto

Jair19 comentado

esta es mi clase de login

public class LoginActivity extends AppCompatActivity {
    private static final String KEY_STATUS = "status";
    private static final String KEY_MESSAGE = "message";
    private static final String KEY_FULL_NAME = "full_name";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_EMPTY = "";
    private EditText etUsername;
    private EditText etPassword;
    private String username;
    private String password;
    private ProgressDialog pDialog;
    private String login_url = "http://192.168.43.72:8888/api/member/login.php";
    private SessionHandler session;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        session = new SessionHandler(getApplicationContext());

        if(session.isLoggedIn()){
            loadDashboard();
        }
        setContentView(R.layout.activity_login);

        etUsername = findViewById(R.id.etLoginUsername);
        etPassword = findViewById(R.id.etLoginPassword);

        Button register = findViewById(R.id.btnLoginRegister);
        Button login = findViewById(R.id.btnLogin);

        //Launch Registration screen when Register Button is clicked
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(i);
                finish();
            }
        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Retrieve the data entered in the edit texts
                username = etUsername.getText().toString().toLowerCase().trim();
                password = etPassword.getText().toString().trim();
                if (validateInputs()) {
                    login();
                }
            }
        });
    }

    /**
     * Launch Dashboard Activity on Successful Login
     */
    private void loadDashboard() {
        Intent i = new Intent(getApplicationContext(), DashboardActivity.class);
        startActivity(i);
        finish();

    }

    /**
     * Display Progress bar while Logging in
     */

    private void displayLoader() {
        pDialog = new ProgressDialog(LoginActivity.this);
        pDialog.setMessage("Logging In.. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();

    }

    private void login() {
        displayLoader();
        JSONObject request = new JSONObject();
        try {
            //Populate the request parameters
            request.put(KEY_USERNAME, username);
            request.put(KEY_PASSWORD, password);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        JsonObjectRequest jsArrayRequest = new JsonObjectRequest
                (Request.Method.POST, login_url, request, new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        pDialog.dismiss();
                        try {
                            //Check if user got logged in successfully

                            if (response.getInt(KEY_STATUS) == 0) {
                                session.loginUser(username,response.getString(KEY_FULL_NAME));
                                loadDashboard();

                            }else{
                                Toast.makeText(getApplicationContext(),
                                        response.getString(KEY_MESSAGE), Toast.LENGTH_SHORT).show();

                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        pDialog.dismiss();

                        //Display error message whenever an error occurs
                        Toast.makeText(getApplicationContext(),
                                error.getMessage(), Toast.LENGTH_SHORT).show();

                    }
                });

        // Access the RequestQueue through your singleton class.
        MySingleton.getInstance(this).addToRequestQueue(jsArrayRequest);
    }

    /**
     * Validates inputs and shows error if any
     * @return
     */
    private boolean validateInputs() {
        if(KEY_EMPTY.equals(username)){
            etUsername.setError("Username cannot be empty");
            etUsername.requestFocus();
            return false;
        }
        if(KEY_EMPTY.equals(password)){
            etPassword.setError("Password cannot be empty");
            etPassword.requestFocus();
            return false;
        }
        return true;
    }
}

0voto

Jair19 comentado

lo que requiero es que al momento de loguearme dependiento al tipo de usuraio se muestren o se oculten item de mi menu circle (ya esta el codigo ariba) hago usu de scripts php para el backend y conexion a mysql

0voto

Jair19 comentado

script php login

<?php
$response = array();
include 'db/db_connect.php';
include 'functions.php';

//Get the input request parameters
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); //convert JSON into array

//Check for Mandatory parameters
if(isset($input['username']) && isset($input['password'])){
    $username = $input['username'];
    $password = $input['password'];
    $query    = "SELECT full_name,password_hash, salt FROM member WHERE username = ?";

    if($stmt = $con->prepare($query)){
        $stmt->bind_param("s",$username);
        $stmt->execute();
        $stmt->bind_result($fullName,$passwordHashDB,$salt);
        if($stmt->fetch()){
            //Validate the password
            if(password_verify(concatPasswordWithSalt($password,$salt),$passwordHashDB)){
                $response["status"] = 0;
                $response["message"] = "Login successful";
                $response["full_name"] = $fullName;
            }
            else{
                $response["status"] = 1;
                $response["message"] = "Invalid username and password combination";
            }
        }
        else{
            $response["status"] = 1;
            $response["message"] = "Invalid username and password combination";
        }

        $stmt->close();
    }
}
else{
    $response["status"] = 2;
    $response["message"] = "Missing mandatory parameters";
}
//Display the JSON response
echo json_encode($response);
?>

0voto

Jair19 comentado

creo que a mi tabla le faltario un dato como tipo_usuario para al monento de logear mediante un if me de las opciones del menu.

1voto

Th3Mik3s comentado

Funciona también agregar un campo para saber el tipo de usuario(int = [0,1,2, etc...] o string = "Admin", "Ejecutivo", "Analista", etc...), queda aclarar que si dejas bien documentado el código no tendrás problemas en un futuro y mientras que el sistema no vaya a requerir una cantidad grande de tipos de usuario.
y en:

Consulta agrega el tipo de usuario

$query = "SELECT full_name, password_hash, salt, tipoUsuario FROM member WHERE username = ?";

Agrégalo en el array

if(password_verify(concatPasswordWithSalt($password,$salt),$passwordHashDB)){
  $response["status"] = 0;
  $response["message"] = "Login successful";
  $response["full_name"] = $fullName;
  $response["tipoUsuario"] = $tipoUsuario ;
}

Recibe el valor:

if (response.getInt(KEY_STATUS) == 0 ){ 
  session.loginUser(
    username,
    response.getString(KEY_FULL_NAME),
    response.getString(KEY_TipoUsuario));
  loadDashboard();
}

Y ya en donde creas el menú

Un switch donde evalues el tipo de usuario y como crear el menú

0voto

Jair19 comentado

gracias @Th3Mik3s por la aportación.

0voto

Jair19 comentado

if (response.getInt(KEY_STATUS) == 0 ){ 
  session.loginUser(
    username,
    response.getString(KEY_FULL_NAME),
   ** response.getString(KEY_TipoUsuario));**
  loadDashboard();
}

en esta parte me manda un error y no se si tendras una idea para el menu mi codigo del menu esta al inicio de mi pregunta por favor @Th3Mik3s

0voto

Peter comentado

Si se soluciono el login con privilegios por favor selecciona la respuesta como correcta y para dudas nuevas, abre preguntas nuevas.

Saludos.

1voto

Th3Mik3s comentado

Saludos

 ** response.getString(KEY_TIPOUSUARIO));**

Copie y pegué, olvidé poner mayúsculas...

No sé como vayas a hacer la persistencia de datos dentro de la aplicación, aquí hay mucha información, cuando tengas el código nos avisas para seguir apoyándote.

0voto

Jair19 comentado

@Th3Mik3s dejo link de proyecto para que me puedas apoyar esta abierto para que puedan aportar.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta