]> BookStack Code Mirror - bookstack/blobdiff - app/Role.php
Finished migration of last angular code
[bookstack] / app / Role.php
index d35b349a8d0b56917cdbff55f2f00c005a3f863e..bf9685ee25d597f35edb3403f82a31d33c220651 100644 (file)
@@ -1,48 +1,95 @@
-<?php
+<?php namespace BookStack;
 
-namespace Oxbow;
-
-use Illuminate\Database\Eloquent\Model;
 
 class Role extends Model
 {
-    /**
-     * Sets the default role name for newly registed users.
-     * @var string
-     */
-    protected static $default = 'viewer';
+
+    protected $fillable = ['display_name', 'description'];
 
     /**
      * The roles that belong to the role.
      */
     public function users()
     {
-        return $this->belongsToMany('Oxbow\User');
+        return $this->belongsToMany(User::class);
+    }
+
+    /**
+     * Get all related JointPermissions.
+     * @return \Illuminate\Database\Eloquent\Relations\HasMany
+     */
+    public function jointPermissions()
+    {
+        return $this->hasMany(JointPermission::class);
     }
 
     /**
-     * The permissions that belong to the role.
+     * The RolePermissions that belong to the role.
      */
     public function permissions()
     {
-        return $this->belongsToMany('Oxbow\Permission');
+        return $this->belongsToMany(RolePermission::class, 'permission_role', 'role_id', 'permission_id');
+    }
+
+    /**
+     * Check if this role has a permission.
+     * @param $permissionName
+     * @return bool
+     */
+    public function hasPermission($permissionName)
+    {
+        $permissions = $this->getRelationValue('permissions');
+        foreach ($permissions as $permission) {
+            if ($permission->getRawAttribute('name') === $permissionName) return true;
+        }
+        return false;
     }
 
     /**
      * Add a permission to this role.
-     * @param Permission $permission
+     * @param RolePermission $permission
      */
-    public function attachPermission(Permission $permission)
+    public function attachPermission(RolePermission $permission)
     {
         $this->permissions()->attach($permission->id);
     }
 
     /**
-     * Get an instance of the default role.
+     * Detach a single permission from this role.
+     * @param RolePermission $permission
+     */
+    public function detachPermission(RolePermission $permission)
+    {
+        $this->permissions()->detach($permission->id);
+    }
+
+    /**
+     * Get the role object for the specified role.
+     * @param $roleName
      * @return Role
      */
-    public static function getDefault()
+    public static function getRole($roleName)
     {
-        return static::where('name', '=', static::$default)->first();
+        return static::where('name', '=', $roleName)->first();
     }
+
+    /**
+     * Get the role object for the specified system role.
+     * @param $roleName
+     * @return Role
+     */
+    public static function getSystemRole($roleName)
+    {
+        return static::where('system_name', '=', $roleName)->first();
+    }
+
+    /**
+     * Get all visible roles
+     * @return mixed
+     */
+    public static function visible()
+    {
+        return static::where('hidden', '=', false)->orderBy('name')->get();
+    }
+
 }