Git Product home page Git Product logo

mapperauth's Introduction

Lift MapperAuth Module

Authentication and Authorization module for Lift-SQL-Mapper.

MapperAuth is a port of Tim Nelson's MongoAuth module to SQL/Mapper.

Installation

Jars are available via the liftmodules.net repo.

SBT 0.12

For Lift 2.5.x (Scala 2.9 and 2.10):

libraryDependencies += "net.liftmodules" %% "mapperauth_2.5" % "0.4-SNAPSHOT"

For Lift 3.0 M0 (Scala 2.10):

libraryDependencies += "net.liftmodules" %% "mapperauth_3.0" % "0.4-SNAPSHOT"

Configuration

You must set the MapperAuth.authUserMeta object that you will be using (see below). Most likely in boot:

// init mapperauth
MapperAuth.authUserMeta.default.set(User)
MapperAuth.indexUrl.default.set(Sitemap.home.path)

See MapperAuth for other settings that can be overriden.

You will also probably want to add the logout and login-token menus.

LiftRules.setSiteMap(SiteMap(List(
  Locs.buildLogoutMenu,
  Locs.buildLoginTokenMenu
) :_*))

Creating a User Data Model

This module provides several traits for constructing user model classes, which include roles and permissions.

There are several ways you can utilize this module:

SimpleUser

model.SimpleUser is a fully implemented user model, but is not extensible in any way. This is only useful for testing and demos. This shows what is necessary to create a user from ProtoAuthUser.

ProtoAuthUser

ProtoAuthUser and ProtoAuthUserMeta are a pair of traits that can be used to build a user model class and meta object. ProtoAuthUser has some standard fields. You can add fields to it, but you can't modify the ones provided. This is a good place to start. If you find you need to modify the provided fields, you can copy and paste them into your user class and use MapperAuthUser.

MapperAuthUser

MapperAuthUser is a trait for defining a Mapper class of AuthUser (provides authorization functionality). This can be used to build a user class from scratch. It only requires id and email fields.

ProtoAuthUserMeta

ProtoAuthUserMeta is a combination of AuthUserMeta and UserLifeCycle traits. These provide authorization functionality and login/logout functionality for MetaMapper objects. No matter which version you use for the Mapper user class, you can use this trait to define your MetaMapper, if it provides sufficient functionality.

"Remember Me" functionality is provided by ExtSession.

LoginToken provides a way for users that forgot their password to log in and change it. Users are sent a link with a token (an UUID) on the url. When they click on it they can be handled appropriately. The implementation is left up to you.

Roles and Permissions

Permissions are stored in its own table, "permissions". To access them use APermission, a simple case class. They have three parts; domain, actions, entities. This was heavily influenced by Apache Shiro's WildcardPermission. Please see the JavaDoc for WildcardPermission for detailed information.

See PermissionSpec for examples.

You can either attach permissions directly to a user or create roles with permissions attached and then add these roles to the user.

Example:

Permission.createUserPermission(user, APermission("printer", "print")).save
Permission.createUserPermission(user, APermission("user", "edit", "123")).save

assert(User.hasPermission(APermission("printer", "manage")) == false)

Role is a Mapper instance that provides a way to group a set of permissions. A user's full set of permissions is calculated using the permissions from any roles assigned to them and the individual permissions assigned to them. There are also LocParams as well as the User-Meta-Singleton that can be used to check for roles.

Example:

val superuser = Role.findOrCreateAndSave("superuser", "a category", Permission.fromAPermission(APermission.all))

user.userRoles.addRole("superuser").saveMe

assert(User.hasRole("superuser")) == true)
assert(User.lacksRole("superuser")) == false)
assert(User.lacksRole("admin")) == true)

SiteMap LocParams

The Locs trait and companion object provide some useful LocParams that use can use when defing your SiteMap.

This code was inspired by the lift-shiro module.

Examples:

Meun.i("Settings") / "settings" >> RequireLoggedIn
Meun.i("Password") / "password" >> RequireAuthentication
Meun.i("Admin") / "admin" >> HasRole("admin")
Meun.i("EditEntitiy") / "admin" / "entity" >> HasPermission(APermission("entity", "edit"))

"Authenticated" means the user logged in by supplying their password. "Logged In" means the user was logged in by either an ExtSession or LoginToken, or they are Authenticated.

Localization

A default localization is provided and can be found here. If you require another language or would prefer different text, copy the default and subtitute your values. See the Localization page on the Liftweb wiki for more information.

Example Implementation

The lift-bootstrap giter8 template provides a fully functioning implementation of a basic user system.

Credits

MapperAuth as well as lift-bootstrap are ported from Tim Nelson's lift-mongoauth and lift-mongo.

License

Apache v2.0. See LICENSE.txt

mapperauth's People

Contributors

tuhlmann avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.