Angular 和 Laravel - 根据登录名和用户 ID 显示并保存到数据库中

用户11352561

我正在使用 Laravel Endpoint 和 Angular7 Frontend 开发结果管理应用程序。当我保存到数据库中时,我想保存登录/用户 ID。此外,它将根据登录 ID 显示数据。也就是说,如果 UserId 为 1(用户是 Admin),它将显示所有数据,但如果用户 Id 是除 1 之外的任何其他数字,它将根据表中的登录名/用户 ID 显示数据

我开发了这些表:

  1. 用户:id、用户名、电子邮件、密码
  2. 考试:id、exam_name、user_id
  3. 结果:id、exam_id、user_id、分数。

此外,我还开发了 Laravel Endpoint 和 Angular7 Frontend。

Laravel 端点:控制器

    public function login(Request $request)
    {
        $credentials = $request->json()->all();

        try
        {
            if(! $token = JWTAuth::attempt($credentials))
            {
                return response()->json(['error' => 'invalid_credentials'], 400);
            } else {
                // Generate token from user 
                $token = JWTAuth::attempt($credentials);
                //return response()->json(compact('token'));
                return response()->json(                [
                    'access_token' => $token,
                    'token_type' => 'bearer'
                ]   );

            }
        }
        catch(JWTException $e)
        {
            return response()->json(['error' => 'could_not_create_token'], 500);
        }
    } 

考试:Laravel EndPoint

    public function index()
    {
        $exams = Exam::all();
        return response()->json($exams);
    }

    public function store(Request $request)
    {
        $request->validate([
            'exam_name' => 'required'
        ]);

        $exam = Exam::create($request->all());

        return response()->json([
            'message' => 'Great success! New Exam created',
            'exam => $exam
        ]);
    }

    public function show(Exam $exam)
    {
        return $exam;
    }

接口

Route::get('/exams', 'ExamController@index')->name('exams.index');

Route::post('/exams', 'ExamController@store')->name('exams.store');

Route::get('/exams/{exam}', 'ExamController@show')->name('exams.show');

角度:exam.service.ts

const apiUrl = "http://localhost/schoolbackend/public/api/exams";

  getExams (): Observable<Exam[]> {
    return this.http.get<Exam[]>(apiUrl)
      .pipe(
        tap(exams => console.log('Fetch exams')),
        catchError(this.handleError('getExams', []))
      );
  }

  addExam (exam): Observable<Exam> {
    return this.http.post<Exam>(apiUrl, exam, httpOptions).pipe(
      tap((exam: Exam) => console.log(`added exam w/ id=${exam._id}`)),
      catchError(this.handleError<Exam>('addExam'))
    );
  }

考试-display.component.ts

  ngOnInit() {

    this.api.getExams()
      .subscribe(res => {
        this.data = res;
        console.log(this.data);
        this.isLoadingResults = false;
      }, err => {
        console.log(err);
        this.isLoadingResults = false;
      });
  }

考试-add.component.ts

  onFormSubmit(form:NgForm) {
    this.isLoadingResults = true;
    this.api.addExam(form)
      .subscribe(res => {
         // let id = res['_id'];
          this.isLoadingResults = false;
          this.router.navigate(['/examlist']);
        }, (err) => {
          console.log(err);
          this.isLoadingResults = false;
        });
  }  

当用户登录时:

  1. 如果 user_id 为 1,则他是管理员,应该能够查看exam-display.ts 中的所有内容,否则只能看到他的考试(基于他的 user_id)。
  2. 当用户从exam-add.component.ts保存到数据库时,他的login/user_id应该保存到exam表中
甘吉特

首先,我认为您应该像is_admin(boolean)在用户表中一样创建一个单独的列直接从 id 中查找不是一个好主意。

  1. 当您使用 Laravel 登录时,您可以从auth::user()函数中获取用户对象
  2. 根据该结果,您可以检查用户是否为管理员。
  3. 如果是 admin 你可以获取所有数据,否则用 user_id 获取。
  4. 同样,当存储在考试表中时,您可以再次从 auth 获取用户。

例子:

// exam controller

// for fetching exams
public function index()
{
    $userId = auth()->id();

    if ($userId == 1) {
       $exams = Exam::all();
    } else {
       $exams = Exam::where('user_id', $userId)->get(); 
    }

    return response()->json($exams);
}

// for creating new exam
public function store(Request $request)
{
    $request->validate([
        'exam_name' => 'required'
    ]);

    $exam = new Exam;
    $exam->exam_name = $request->exam_name;
    $exam->user_id = auth()->id()
    $exam->save();

    return response()->json([
        'message' => 'Great success! New Exam created',
        'exam => $exam
    ]);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用户和SQL Server中的登录名之间的区别

使用laravel和Angular 4问题通过API将文件保存在数据库中

Laravel在所有请求中检查登录名和Auth :: check()

Windows用户的数据库级别权限,同时为该用户和包含AD组创建的登录名?

ASP中的登录名和密码

用户名,显示名和登录名有什么区别?

如何缓存用户名和登录名以在 LoginSuccess 类中显示?

Laravel 5和Socialite,如何保存在数据库中并登录

使用angular和php会话创建登录名

Web应用程序中的IdentityServer4登录名和用户

注册时验证用户的生日,但不验证Ruby on Rails中的Facebook和Google登录名

Rails:将用户ID保存到数据库,但仅在视图中显示用户名

laravel登录,显示URL中的密码和ID

登录名和密码存储在数据库中

Textarea更新无法通过vue.js $ emit事件,axios和laravel后端api持久保存到数据库

如何在选择时和将图像保存到数据库之前显示图像?

(Windows)在postgres9.4中使用登录名,createdb和createrole创建新用户,但无法登录?

根据数据库中保存的经度和纬度显示附近的地方。angular6 + sql server

用户ID不会保存到数据库中,而成为null

从 Laravel 中的 Json 响应保存到用户数据库

将日期和时间保存到数据库

打字稿和猫鼬:保存到数据库

使用Rest和Spring Boot将阿拉伯字符保存到数据库中

如何将HTML5,经度和纬度保存到数据库中?

将文本和值从数据库表保存到组合框中

我如何更新 cloudinary 图像 url 并保存到 nodejs 和 reactjs 的数据库中

Json 哈希以行和列的形式保存到关系数据库中

使用mysql和php显示ID匹配的数据库中的单个结果

Laravel在数据库中找到where('week',$ week)和where('user_id',$ user_id)查找ID