Есть ли способ ограничить аутентификацию в firebase только одним пользователем - PullRequest
0 голосов
/ 18 июня 2020

Я хочу создать приложение, которое использует аутентификацию, хранилище и базу данных firebase, но я хочу, чтобы только администратор мог добавлять видео в firebase, что означает, что я хочу ограничить аутентификацию только одним человеком, т.е. приложение может видеть данные, то есть видео в приложении данные используются администратором, но пользователи не могут редактировать / добавлять данные в firebase.

Например, приложение udemy: где инструкторы могут добавлять видео, а студенты могут только используйте эти видео.

Примечание: я знаю, как разрешить пользователям добавлять данные, вводя их информацию (адрес электронной почты и пароль), но я хочу, чтобы только один человек мог вводить адрес электронной почты и пароль для добавить видео.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020
public class UploadVideo extends AppCompatActivity {

    private static final int PICK_VIDEO = 1;
    VideoView vidoeView;
    Button button;
    ProgressBar progressBar;
    EditText editText;
    private Uri videoUri;
    MediaController mediaController;
    StorageReference storageReference;
    DatabaseReference databaseReference;
    Member member;
    UploadTask uploadTask;
    private FirebaseAuth mAuth;


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

        mAuth = FirebaseAuth.getInstance();

        member = new Member();
        storageReference = FirebaseStorage.getInstance().getReference("Video");
        databaseReference = FirebaseDatabase.getInstance().getReference("video");




        vidoeView = findViewById(R.id.videoView_mainID);
        button = findViewById(R.id.button_upload_main);
        progressBar = findViewById(R.id.progressBarID);
        editText = findViewById(R.id.et_video_name);
        mediaController = new MediaController(this);
        vidoeView.setMediaController(mediaController);
        vidoeView.start();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                UploadVideo();
            }


        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        mAuth.signOut();
        Toast.makeText(UploadVideo.this,"Signed Out",Toast.LENGTH_LONG).show();
        startActivity(new Intent(UploadVideo.this, MainActivity.class));
        finish();


        return super.onOptionsItemSelected(item);

    }




    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == PICK_VIDEO || resultCode == RESULT_OK || data != null || data.getData() != null){

            videoUri = data.getData();

            vidoeView.setVideoURI(videoUri);
        }
    }

    public void ChooseVideo(View view) {

        Intent intent = new Intent();
        intent.setType("video/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent,PICK_VIDEO);
    }

    private String getExtension(Uri uri){
        ContentResolver contentResolver = getContentResolver();
        MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
    }

    public void ShowVideo(View view) {

        Intent intent = new Intent(UploadVideo.this, ShowVideoActivity.class);
        startActivity(intent);
    }

    private void UploadVideo() {
        final String videoName = editText.getText().toString();
        final String search = editText.getText().toString().toLowerCase();

        if(videoUri != null && !TextUtils.isEmpty(videoName)){

            progressBar.setVisibility(View.VISIBLE);
            final StorageReference reference = storageReference.child(System.currentTimeMillis() + "." +getExtension(videoUri));
            uploadTask = reference.putFile(videoUri);

            Task<Uri> uriTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if(!task.isSuccessful()){
                        throw task.getException();
                    }
                    return reference.getDownloadUrl();
                }
            })
                    .addOnCompleteListener(new OnCompleteListener<Uri>() {
                        @Override
                        public void onComplete(@NonNull Task<Uri> task) {

                            if(task.isSuccessful()){
                                Uri downloadUri = task.getResult();
                                progressBar.setVisibility(View.INVISIBLE);
                                Toast.makeText(UploadVideo.this,"Video Saved",Toast.LENGTH_LONG).show();

                                member.setName(videoName);
                                member.setVideourl(downloadUri.toString());
                                member.setSearch(search);
                                String i = databaseReference.push().getKey();
                                databaseReference.child(i).setValue(member);
                            }else{
                                Toast.makeText(UploadVideo.this,"Failed to upload",Toast.LENGTH_LONG).show();
                            }
                        }
                    }); }
        else{
            Toast.makeText(UploadVideo.this,"All fields are required",Toast.LENGTH_LONG).show();
        }
    }
}

Это код, который я использовал для хранения и загрузки данных в базу данных

0 голосов
/ 18 июня 2020

Вы не можете ограничить аутентификацию конкретным c пользователем, но вы можете ограничить определенные действия для этого пользователя.

Например, я часто начинаю свои проекты с правилами безопасности с общедоступная база данных, которую может записывать только одна учетная запись, путем встраивания UID этого пользователя в мои правила. В правилах Firebase Storage это выглядело бы так:

match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth != null && request.auth.uid == "theUidOfMyOneUser";
}

На этом этапе любой может вызвать API входа в мой проект и аутентификацию, но только пользователь, чей UID у меня есть. в моих правилах безопасности может записывать файлы.

Также см. документацию Firebase о обеспечении доступа к файлам , в частности, раздел , предоставляющий пользователям доступ к их собственным файлам (на чем я основал приведенные выше правила).

...