mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-11-03 02:13:16 +03:00 
			
		
		
		
	- Moves guest user caching from User class to app container for simplicity. - Updates test to use simpler $this->users->guest() method for consistency. - Streamlined helpers to avoid function overlap for simplicity. - Extracted user profile dropdown while doing changes.
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Tests\Helpers;
 | 
						|
 | 
						|
use BookStack\Permissions\PermissionsRepo;
 | 
						|
use BookStack\Users\Models\Role;
 | 
						|
use BookStack\Users\Models\User;
 | 
						|
 | 
						|
class UserRoleProvider
 | 
						|
{
 | 
						|
    protected ?User $admin = null;
 | 
						|
    protected ?User $editor = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a typical "Admin" user.
 | 
						|
     */
 | 
						|
    public function admin(): User
 | 
						|
    {
 | 
						|
        if (is_null($this->admin)) {
 | 
						|
            $adminRole = Role::getSystemRole('admin');
 | 
						|
            $this->admin = $adminRole->users()->first();
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->admin;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a typical "Editor" user.
 | 
						|
     */
 | 
						|
    public function editor(): User
 | 
						|
    {
 | 
						|
        if ($this->editor === null) {
 | 
						|
            $editorRole = Role::getRole('editor');
 | 
						|
            $this->editor = $editorRole->users->first();
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->editor;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a typical "Viewer" user.
 | 
						|
     */
 | 
						|
    public function viewer(array $attributes = []): User
 | 
						|
    {
 | 
						|
        $user = Role::getRole('viewer')->users()->first();
 | 
						|
        if (!empty($attributes)) {
 | 
						|
            $user->forceFill($attributes)->save();
 | 
						|
        }
 | 
						|
 | 
						|
        return $user;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the system "guest" user.
 | 
						|
     */
 | 
						|
    public function guest(): User
 | 
						|
    {
 | 
						|
        return User::getGuest();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new fresh user without any relations.
 | 
						|
     */
 | 
						|
    public function newUser(array $attrs = []): User
 | 
						|
    {
 | 
						|
        return User::factory()->create($attrs);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new fresh user, with the given attrs, that has assigned a fresh role
 | 
						|
     * that has the given role permissions.
 | 
						|
     * Intended as a helper to create a blank slate baseline user and role.
 | 
						|
     * @return array{0: User, 1: Role}
 | 
						|
     */
 | 
						|
    public function newUserWithRole(array $userAttrs = [], array $rolePermissions = []): array
 | 
						|
    {
 | 
						|
        $user = $this->newUser($userAttrs);
 | 
						|
        $role = $this->attachNewRole($user, $rolePermissions);
 | 
						|
 | 
						|
        return [$user, $role];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Attach a new role, with the given role permissions, to the given user
 | 
						|
     * and return that role.
 | 
						|
     */
 | 
						|
    public function attachNewRole(User $user, array $rolePermissions = []): Role
 | 
						|
    {
 | 
						|
        $role = $this->createRole($rolePermissions);
 | 
						|
        $user->attachRole($role);
 | 
						|
        return $role;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new basic role with the given role permissions.
 | 
						|
     */
 | 
						|
    public function createRole(array $rolePermissions = []): Role
 | 
						|
    {
 | 
						|
        $permissionRepo = app(PermissionsRepo::class);
 | 
						|
        $roleData = Role::factory()->make()->toArray();
 | 
						|
        $roleData['permissions'] = $rolePermissions;
 | 
						|
 | 
						|
        return $permissionRepo->saveNewRole($roleData);
 | 
						|
    }
 | 
						|
}
 |