Skip to content

Commit

Permalink
Added roles to add user form
Browse files Browse the repository at this point in the history
  • Loading branch information
mirhagen committed Jan 29, 2010
1 parent 2824d24 commit 8dfe7c3
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 46 deletions.
Expand Up @@ -45,9 +45,9 @@ class UserController {
def delete = {

if( !params.id )
return render(status: 400, text: "You need to specify a user")
return render(status: 400, text: "You need to specify a user")
if( !User.exists(params.id) )
return render(status: 404, text: "User with id $params.id not found")
return render(status: 404, text: "User with id $params.id not found")

def user = User.get(params.id as Integer)

Expand All @@ -62,7 +62,7 @@ class UserController {
if( !deleteEvent.hasErrors()) {
flash.message = "${user.username} is now deleted"
return render(status: 200, text: "User with id $params.id deleted")
}
}

return render(status: 503, text: "Server error: user delete error #188")

Expand Down Expand Up @@ -114,20 +114,20 @@ class UserController {
@Secured(['IS_AUTHENTICATED_FULLY'])
def form = {
if( !params.id )
return renderFormCreateMode(params)
return renderFormCreateMode(params)

def person = User.get(params.id)

if( !person )
return render(status: 404, text: "User with id $params.id not found")
return render(status: 404, text: "User with id $params.id not found")

return renderFormEditMode(person)

}

private renderFormCreateMode(person){
def roleNames = Role.list()
return render( template:'userForm', model: [person: person, roleNames: roleNames])
return render( template:'userForm', model: [person: person, roleNames: getRoles(person)])
}

private renderFormEditMode(person){
Expand All @@ -153,7 +153,7 @@ class UserController {
def person = User.read(params.id)

if( !person )
return render(status: 404, text: "User with id $params.id not found")
return render(status: 404, text: "User with id $params.id not found")

if(uc.hasErrors()) {
person.validate()
Expand Down Expand Up @@ -185,20 +185,20 @@ class UserController {
private renderUpdateResults(params, person){
withFormat{
html{
List roles = Role.list()
roles.sort { r1, r2 ->
r1.authority <=> r2.authority
}
Set userRoleNames = []
for (role in person.authorities) {
userRoleNames << role.authority
}
LinkedHashMap<Role, Boolean> roleMap = [:]
for (role in roles) {
roleMap[(role)] = userRoleNames.contains(role.authority)
}
// List roles = Role.list()
// roles.sort { r1, r2 ->
// r1.authority <=> r2.authority
// }
// Set userRoleNames = []
// for (role in person.authorities) {
// userRoleNames << role.authority
// }
// LinkedHashMap<Role, Boolean> roleMap = [:]
// for (role in roles) {
// roleMap[(role)] = userRoleNames.contains(role.authority)
// }
def template = params.template ? params.template : 'userForm'
return render( template: template, model: [ person: person, roleMap: roleMap, roles: Role.list(), loggedInUser: securityService.getLoggedInUser() ] , bean: person)
return render( template: template, model: [ person: person, roleMap: getRoles(person), roles: Role.list(), loggedInUser: securityService.getLoggedInUser() ] , bean: person)
}
js{
return render ( [ userInstance: person ] as JSON )
Expand All @@ -216,6 +216,22 @@ class UserController {
}
}
}

private LinkedHashMap getRoles(person){
List roles = Role.list()
roles.sort { r1, r2 ->
r1.authority <=> r2.authority
}
Set userRoleNames = []
for (role in person.authorities) {
userRoleNames << role.authority
}
LinkedHashMap<Role, Boolean> roleMap = [:]
for (role in roles) {
roleMap[(role)] = userRoleNames.contains(role.authority)
}
return roleMap
}
}

class UserUpdateCommand {
Expand All @@ -228,11 +244,11 @@ class UserUpdateCommand {
email(nullable: false, blank: false)
passwd( nullable: false, blank: false, validator: { val, obj ->
if( obj.user == obj.loggedInUser &&
obj.authenticateService.encodePassword(obj.passwdRepeat) != val) {
return['user.authentication.password.missmatch']
obj.authenticateService.encodePassword(obj.passwdRepeat) != val) {
return['user.authentication.password.missmatch']
} else if( obj == obj.securityService.getLoggedInUser() &&
!obj.securityService.isUserAdmin() ) {
return['user.authentication.notAuthorized']
!obj.securityService.isUserAdmin() ) {
return['user.authentication.notAuthorized']
}
})

Expand Down
2 changes: 1 addition & 1 deletion qanban/grails-app/views/mainView/view.gsp
Expand Up @@ -43,7 +43,7 @@
<li><a class="tab active" href="${createLink(controller:'mainView',action:'showBoard',params:[ 'board.id': board.id])}"><g:message code="mainView.tabs.board"/></a></li>
<li><a class="tab" href="${createLink(controller:'mainView',action:'showLog',params:[ 'board.id': board.id])}"><g:message code="mainView.tabs.log"/></a></li>
<li><a class="tab" href="${createLink(controller:'mainView',action:'showArchive',params:[ 'board.id': board.id])}">${board.phases[-1].title.encodeAsHTML()}</a></li>
<li><a class="tab" href="${createLink(controller:'mainView',action:'showSettings',params:[ 'board.id': board.id])}"><g:message code="mainView.tabs.settings"/></a></li>
<g:ifAllGranted role="ROLE_QANBANADMIN"><li><a class="tab" href="${createLink(controller:'mainView',action:'showSettings',params:[ 'board.id': board.id])}"><g:message code="mainView.tabs.settings"/></a></li></g:ifAllGranted>
</ul>
</div>
Expand Down
4 changes: 2 additions & 2 deletions qanban/grails-app/views/user/_userForm.gsp
Expand Up @@ -21,7 +21,7 @@
onLoading="jQuery.toggleSpinner()"
onComplete="jQuery.toggleSpinner()">

<g:render template="userFormContent" bean="${person}"/>
<g:render template="userFormContent" model="[person:person,roleNames:roleNames]"/>

</g:formRemote>
</g:if>
Expand All @@ -33,7 +33,7 @@
onLoading="jQuery.toggleSpinner()"
onComplete="jQuery.toggleSpinner()">

<g:render template="userFormContent" bean="${person}"/>
<g:render template="userFormContent" model="[person:person,roleNames:roleNames]"/>

</g:formRemote>
</g:else>
Expand Down
37 changes: 18 additions & 19 deletions qanban/grails-app/views/user/_userFormContent.gsp
@@ -1,14 +1,14 @@
<g:if test="${it.id}">
<g:if test="${person.id}">
<div class="header">
<avatar:gravatar email="${it.email}" size="38"/>
<avatar:gravatar email="${person.email}" size="38"/>
<label for="userRealName"><g:message code="_userForm.label.userRealName"/></label>
<input type="text" class="property ${hasErrors(bean:it,field:'userRealName','errors')}" name="userRealName" value="${it.userRealName?.encodeAsHTML()}"/>
<input type="text" class="property ${hasErrors(bean:person,field:'userRealName','errors')}" name="userRealName" value="${person.userRealName?.encodeAsHTML()}"/>
</div>
</g:if>
<g:else>
<div class="header create">
<label for="userRealName"><g:message code="_userForm.label.userRealName"/></label>
<input type="text" class="property ${hasErrors(bean:it,field:'userRealName','errors')}" name="userRealName" value="${it.userRealName?.encodeAsHTML()}"/>
<input type="text" class="property ${hasErrors(bean:person,field:'userRealName','errors')}" name="userRealName" value="${person.userRealName?.encodeAsHTML()}"/>
</div>
</g:else>

Expand All @@ -17,15 +17,15 @@
<div class="properties">

<label for="email" class="email"><g:message code="_userForm.label.email"/></label>
<input type="text" class="property ${hasErrors(bean:it,field:'email','errors')}" name="email" value="${it.email?.encodeAsHTML()}"/>
<input type="text" class="property ${hasErrors(bean:person,field:'email','errors')}" name="email" value="${person.email?.encodeAsHTML()}"/>

<label for="username"><g:message code="_userForm.label.username"/></label>
<input type="text" class="property ${hasErrors(bean:person,field:'username','errors')}" name="username" value="${it.username?.encodeAsHTML()}"/>
<input type="text" class="property ${hasErrors(bean:person,field:'username','errors')}" name="username" value="${person.username?.encodeAsHTML()}"/>

<label for="description"><g:message code="_userForm.label.description"/></label>
<textarea id="tafix" type="text" class="property ${hasErrors(bean:it,field:'description','errors')}" name="description">${it.description?.encodeAsHTML()}</textarea>
<textarea id="tafix" type="text" class="property ${hasErrors(bean:person,field:'description','errors')}" name="description">${person.description?.encodeAsHTML()}</textarea>

<g:if test="${it.id}">
<g:if test="${person.id}">

<div class="roles">

Expand All @@ -40,30 +40,29 @@

<div class="confirmPass">
<label for="passwdRepeat"><g:message code="_userForm.label.confirmPasswd"/></label>
<input type="password" name="passwdRepeat" class="${hasErrors(bean:it,field:'passwd','errors')}">
<input type="password" name="passwdRepeat" class="${hasErrors(bean:person,field:'passwd','errors')}">
</div>

</g:if>
<g:else>
<div class="roles">
<div class="createRoles">

<span class="label"><g:message code="_userForm.label.roles"/></span>
<ul>
<g:each in="${roleNames}" var='role' status='i'>
<li>${role.encodeAsHTML()}</li>
</g:each>
</ul>
<span class="label"></span>
<g:each var="entry" in="${roleNames}">
${entry.key.authority.encodeAsHTML()}
<g:checkBox name="${entry.key.authority}" value="${entry.value}"/>
</g:each>
</div>

<div class="password">
<label for="passwd"><g:message code="_userForm.label.passwd"/></label>
<input type="password" name="passwd" class="${hasErrors(bean:it,field:'passwd','errors')}"><br/>
<input type="password" name="passwd" class="${hasErrors(bean:person,field:'passwd','errors')}"><br/>
<label for="passwdRepeat" class="repeatPass"><g:message code="_userForm.label.passwdRepeat"/></label>
<input type="password" name="passwdRepeat" class="${hasErrors(bean:it,field:'passwdRepeat','errors')} repeatPassInput">
<input type="password" name="passwdRepeat" class="${hasErrors(bean:person,field:'passwdRepeat','errors')} repeatPassInput">
</div>
</g:else>

</div>

<input type="hidden" name="id" value="${it?.id}"/>
<input type="hidden" name="id" value="${person?.id}"/>
<input style="display: none;" type="submit"/>

0 comments on commit 8dfe7c3

Please sign in to comment.