2016-07-29 2 views
3

Как добавить аутентификацию роли пользователя в приложение для Android-разработчиков firebase? Из того, что я вижу, firebase имеет только аутентификацию по электронной почте и паролю. Я хочу разработать приложение для Android, которое имеет 2+ пользовательские роли. Например, если нормальный член входит в систему, он перейдет в normal_memberActivity, и если он член премии, он перейдет к premium_memberActivity. Как добавить роли в firebase? Не удалось найти подобную проблему, такую ​​как моя.Как разделять роли пользователей в firebase?

Обычно я хотел бы сделать это следующим образом:

String role = intent.getStringExtra("role"); 

if (role.equals("admin")){ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new AdminHomeFragment()).commit(); 
}else{ 
FragmentManager fm = getSupportFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new NormalFragment()).commit(); 
} 
+0

Вы должны сохранить своих пользователей в базе данных реального времени. Таким образом, вы можете создать пользовательский пользователь с атрибутом role. Поэтому каждый раз, когда пользователь входит в систему, вы можете проверить его роль в базе данных. –

+0

@ RosárioPereiraFernandes отличается от Auth? Если я собираюсь использовать базу данных в реальном времени для своих пользователей, будет ли она также использоваться для системы друзей? – Gian7

+0

Да, это лучший способ создать систему друзей. Надеюсь, вы знакомы с базами данных. В случае, если вы работали с базами данных SQL, это может выглядеть несколько иначе для вас (поскольку firebase использует базу данных NoSQL JSON), но тогда вы привыкнете к ней. –

ответ

6

Вы можете добавить узел ролей в firebase базы данных, хранящей UID пользователя и их роль.

"roles" : { 
    "uid1" : "normal", 
    "uid2" : "premium", 
    "uid3" : "normal", 
} 

Тогда вы можете получить значение роли после того, как пользователь успешно подписан в

ref.child("roles").child(firebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String role = dataSnapshot.getValue(String.class); 
     // check role and replace fragment 
    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Попробуем позже! :) Кстати, можете ли вы также дать мне фрагмент при регистрации обычного и премиального пользователя? Полностью не знаю. Благодаря! – Gian7

+0

@ Gian7 следуйте [этому руководству] (https://firebase.google.com/docs/auth/android/password-auth), вы можете установить значение этому узлу «ролей» под 'addOnCompleteListener' – Wilik

1

Firebase только начал поддержку доступа на основе ролей по любому пользователю с помощью требований пользовательских пользователей на ID маркеров: https://firebase.google.com/docs/auth/admin/custom-claims

Вы бы определить правила доступа к премиум:

{ 
    "rules": { 
    "premiumContent": { 
     ".read": "auth.token.role === 'premium'", 
     ".write": "auth.token.role === 'premium'", 
    } 
    } 
} 

роль пользователя с Admin SDK:

// Set admin privilege on the user corresponding to uid. 
admin.auth().setCustomUserClaims(uid, {role: 'premium'}).then(() => { 
    // The new custom claims will propagate to the user's ID token the 
    // next time a new one is issued. 
}); 

Это будет распространяться на лексем претензий ID соответствующего пользователя в.

Чтобы проанализировать его из токена на клиенте, вам необходимо base64 декодировать полезную нагрузку маркера ID.

Вы можете обновить/понизить пользователей по мере необходимости. Они также предоставили программный способ перечислить всех пользователей, если у вас есть повторяющиеся скрипты для изменения уровней доступа пользователей: https://firebase.google.com/docs/auth/admin/manage-users#list_all_users

Смежные вопросы