Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.36 KB | None | 0 0
  1. package models
  2.  
  3. import externals.BCrypt
  4. import play.db.anorm._;
  5.  
  6.  
  7. class User (protected var _id: Int, protected var _email: String, protected var _name: String,
  8.             protected var _password: String, protected var _permissions: Set[String]) extends ActiveModel {
  9.     private val BCRYPT_WORK_FACTOR: Int = 6
  10.    
  11.    
  12.     def id: Int = _id
  13.     def id_=(v: Int) = { _id = v; _dirty = true}
  14.     def email: String = _email
  15.     def email_=(v: String) = { _email = v; _dirty = true }
  16.     def name: String = _name
  17.     def name_=(v: String) = { _name = v; _dirty = true }
  18.     def permissions: Set[String] = _permissions
  19.    
  20.    
  21.     def password_=(password: String) = {
  22.         _password = BCrypt.hashpw(password, BCrypt.gensalt(BCRYPT_WORK_FACTOR))
  23.         _dirty = true
  24.     }
  25.     def checkPassword(password: String): Boolean = {
  26.         return BCrypt.checkpw(password, _password)
  27.     }
  28.    
  29.     def hasPermission(permission: String): Boolean = _permissions.contains(permission)
  30.     def grantPermission(permission: String) = {
  31.         var _set = new scala.collection.immutable.HashSet[String]
  32.        
  33.         _permissions.foreach( p => { _set += p })
  34.         _set += permission
  35.         _permissions = _set.toSet[String]
  36.         _dirty = true
  37.     }
  38.     def revokePermission(permission: String) = {
  39.         var _set = new scala.collection.immutable.HashSet[String]
  40.        
  41.         _permissions.foreach( p => { if (p != permission) _set += p })
  42.         _permissions = _set.toSet[String]
  43.         _dirty = true
  44.     }
  45.    
  46.     protected def insert(): Boolean = {
  47.         return true
  48.     }
  49.     protected def update(): Boolean = {
  50.         return true
  51.     }
  52. }
  53.  
  54. object User {
  55.     private val USER_TABLE: String = "users"
  56.     private val USER_PERMISSIONS_TABLE: String = "user_permissions"
  57.    
  58.     private val GET_USER_BY_ID: String =
  59.         "SELECT * FROM tbl WHERE id={id};".replace("tbl", USER_TABLE)
  60.     private val GET_USER_PERMISSIONS: String =
  61.         "SELECT * FROM tbl WHERE user_id={id};".replace("tbl", USER_PERMISSIONS_TABLE)
  62.    
  63.     private val INSERT_USER: String =
  64.         "INSERT INTO tbl (name, email, password) VALUES ({name}, {email}, {password});".replace("tbl", USER_TABLE)
  65.    
  66.     private val UPDATE_USER: String =
  67.         "UPDATE tbl SET name={name}, email={email}, password={password} WHERE id={id};".replace("tbl", USER_TABLE)
  68.    
  69.     def getById(id: Int): User = {
  70.         var query = SQL(GET_USER_BY_ID).on("id" -> id)
  71.         var result = query.apply().head
  72.        
  73.         return createUserFromRow(result)
  74.     }
  75.     private def createUserFromRow(row: Row): User = {
  76.         var id: Int = row.get[Int]("id").get
  77.         var email: String = row.get[String]("email").get
  78.         var name: String = row.get[String]("name").get
  79.         var password: String = row.get[String]("password").get
  80.        
  81.         var permissions: Set[String] = getPermissionsById(id)
  82.        
  83.         return new User(id, email, name, password, permissions)
  84.     }
  85.    
  86.     def getPermissionsById(id: Int): Set[String] = {
  87.         var query = SQL(GET_USER_PERMISSIONS).on("id" -> id)
  88.        
  89.         var permSet = new scala.collection.mutable.HashSet[String]
  90.        
  91.         val permissions = query.apply().foreach(
  92.             row => permSet.add(row.get[String]("permission_name").get)
  93.         )
  94.        
  95.         return permSet.toSet[String]
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement