package org.commonjava.web.user.model;
import static org.apache.commons.lang.StringUtils.join;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotBlank;
@Entity
@Table( name = "perms" )
public class Permission
implements org.apache.shiro.authz.Permission
{
public static final String WILDCARD = "*";
public static final String CREATE = "create";
public static final String READ = "read";
public static final String UPDATE = "update";
public static final String DELETE = "delete";
public static final String ADMIN = "admin";
public static final String NAMESPACE = "permissions";
@Id
@GeneratedValue
private int id;
@NotBlank
@Column( unique = true )
private String name;
public Permission()
{
}
public Permission( final String... nameParts )
{
this.name = name( nameParts );
}
public int getId()
{
return id;
}
public void setId( final int id )
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName( final String name )
{
this.name = name;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals( final Object obj )
{
if ( this == obj )
{
return true;
}
if ( obj == null )
{
return false;
}
if ( getClass() != obj.getClass() )
{
return false;
}
final Permission other = (Permission) obj;
if ( !name.equals( other.name ) )
{
return false;
}
return true;
}
@Override
public boolean implies( final org.apache.shiro.authz.Permission p )
{
if ( name.endsWith( WILDCARD ) && ( p instanceof Permission ) )
{
Permission perm = (Permission) p;
String prefix = name.substring( 0, name.length() - WILDCARD.length() );
String permName = perm.getName();
return permName.length() > prefix.length() && permName.startsWith( prefix );
}
return false;
}
@Override
public String toString()
{
return String.format( "Permission@%d [%s]", id, name );
}
public static String name( final String... parts )
{
return join( parts, ":" );
}
}