使用Grails結(jié)合acegi開發(fā)權(quán)限設(shè)置總結(jié)
當(dāng)管理員點(diǎn)開一個role頁面后,顯示該role具有的權(quán)限和系統(tǒng)所有的權(quán)限,可以對其修改。
/project/create** 項(xiàng)目創(chuàng)建
/project/list** 項(xiàng)目列表
/project/edit** 項(xiàng)目編輯
/project/delete** 項(xiàng)目刪除
{
Requestmap.executeQuery(
"SELECT rm FROM Requestmap rm " +
"WHERE rm.configAttribute LIKE :roleName",
[roleName: '%'+authority.authority+'%'])
}
顯示過程如下,resourceMap中的key為requestmap, value為true 或者false,然后就可以在前臺的checkbox中顯示出來
List requestmaps = Requestmap.list()
requestmaps.sort { r1, r2 ->
r1.url <=> r2.url
}
List ownedRequestmaps = findRequestmapsByRole(authority)
Set authResourcesNames = []
for (requestmap in ownedRequestmaps) {
authResourcesNames << requestmap.url
}
LinkedHashMap<Requestmap, Boolean> resourceMap = [:]
for (requestmap in requestmaps) {
resourceMap[(requestmap)] = authResourcesNames.contains(requestmap.url)
}
System.out.println(resourceMap);
return [authority: authority, resourceMap: resourceMap]
}
當(dāng)提交某個role的requestmap修改時,采用如下方法,循環(huán)更新所有的requestmap
List requestmaps = Requestmap.list()
for (requestmap in requestmaps)
{
String configAttribute = requestmap.configAttribute
Set parts = configAttribute.split(',') as Set
String roleName = authority.authority
String value = params.get(requestmap.url)
//request map checked
if ('on' == value)
{
parts.add(roleName)
}
else
{
parts.remove(roleName)
}
requestmap.configAttribute = parts.join(',')
System.out.println(parts)
}
具體步驟如下:
2) 將這些requestmap 分配給一個超級管理員(ROLE_ADMIN)
def authenticateService
def init = { servletContext ->
Person.withTransaction {
def me = new Person(
//username: "sarbogast",
username: "admin",
userRealName: "Sebastien Arbogast",
passwd: authenticateService.encodePassword("111111"),
enabled: true,
email: "sebastien@epseelon.com"
)
me.save()
def user = new Person(
//username: "sarbogast",
username: "leiw",
userRealName: "leiw dandan",
passwd: authenticateService.encodePassword("111111"),
enabled: true,
email: "leiw@epseelon.com"
)
user.save()
def projectAdmin = new Person(
//username: "sarbogast",
username: "project",
userRealName: "project admin",
passwd: authenticateService.encodePassword("111111"),
enabled: true,
email: "project@epseelon.com"
)
projectAdmin.save()
def adminAuth = new Authority(
description: "administrator",
authority: "ROLE_ADMIN"
)
adminAuth.save()
def projectAdminAuth = new Authority(
description: "project administrator",
authority: "ROLE_PROJECT_ADMIN"
)
projectAdminAuth.save()
def userAuth = new Authority(
description:"user",
authority: "ROLE_USER"
)
userAuth.save()
me.addToAuthorities(adminAuth)
me.addToAuthorities(userAuth)
projectAdmin.addToAuthorities(projectAdminAuth)
user.addToAuthorities(userAuth)
def authorityMap = new Requestmap(
url: '/authority/**',
configAttribute: 'ROLE_ADMIN',
description: '角色管理'
)
authorityMap.save()
def requestmapMap = new Requestmap(
url:'/requestmap/**',
configAttribute: 'ROLE_ADMIN',
description: '資源管理'
)
requestmapMap.save()
def projectListMap = new Requestmap(
url: '/project/list**',
configAttribute: 'ROLE_USER, ROLE_ADMIN, ROLE_PROJECT_ADMIN',
description: '項(xiàng)目查看'
)
projectListMap.save()
def projectCreateMap = new Requestmap(
url: '/project/create**',
configAttribute: 'ROLE_ADMIN',
description: '項(xiàng)目新增'
)
projectCreateMap.save()
def projectEditMap = new Requestmap(
url: '/project/edit**',
configAttribute: 'ROLE_ADMIN',
description: '項(xiàng)目修改'
)
projectEditMap.save()
def projectDelMap = new Requestmap(
url: '/project/delete**',
configAttribute: 'ROLE_ADMIN',
description: '項(xiàng)目刪除'
)
projectDelMap.save()
new Project(title:'test1', description:'').save();
new Project(title:'test2', description:'').save();
new Project(title:'test3', description:'').save();
}
}
def destroy = {
}
}
<g:hiddenField name="id" value="${projectInstance?.id}" />
<span class="button"><g:actionSubmit class="edit" action="edit" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /></span>
<span class="button"><g:actionSubmit class="delete" action="delete" value="${message(code: 'default.button.delete.label', default: 'Delete')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Are you sure?')}');" /></span>
</g:form>
只能將form改成原HTML原始的方式
<form action="/todolist/project/delete" method="post" ></form>
4) 修改requestmap 的domain,增加description,方便checkbox顯示額外的權(quán)限描述信息。
posted on 2012-02-14 17:01 想飛就飛 閱讀(772) 評論(0) 編輯 收藏 所屬分類: Groovy/Grails