2012-04-05 53 views
2

我準備將一個Java Swing應用程序移植到Web上。該應用程序是一個多業務應用程序,因此對於每個業務至少有一個管理員,並且此管理員可以授予業務用戶權限(針對每個模塊)。Grails或Play Framework的動態ACL?

換句話說:我有模塊帳戶,客戶和發票,以及權限讀寫。該業務A有3個用戶:John,Mike & Mary。

John是管理員,授予Mike讀取&寫入客戶和發票,但沒有帳戶訪問權限,授予Mary對帳戶的讀寫訪問權限,讀取發票並且無權訪問客戶。

而我的問題是:是否有任何模塊/插件爲Play Framework或Grails做到這一點?如果沒有,我該怎麼做?

回答

2

Grails的,有插件都Spring SecurityShiro

使用Spring Security可以在運行時創建角色,並在運行時將用戶添加到角色。

有一個名爲spring-security-ui的插件爲您提供了一個GUI,但我認爲它不適合您的用例,因爲您可能不希望John授予他人訪問其他業務的權限。 Spring-security-ui更像是一個超級管理員GUI。但應該很容易創建自己的用戶界面來授予訪問權限。

您需要決定是否需要三個角色; ROLE_ADMIN,ROLE_READ和ROLE_WRITE,並添加額外的檢查(例如過濾器)來檢查用戶是否嘗試訪問自己的業務。或者,如果你要動態地添加三個角色對於每個業務,即ROLE_BUSINESS1_ADMIN,ROLE_BUSINESS2_ADMIN等

動態地添加一個角色:

String roleName = ... 
def role = Role.findByAuthority(roleName) ?: new Role(authority: roleName).save() 

要添加一個角色給用戶:

PersonRole.create user, role, true 

(在上例中,域對象稱爲人員和角色,但您可以使用任何其他名稱)

要動態地將訪問規則添加到URL,您需要使用Requestmap Instances Stored in the Database,或者您可以用編程方式檢查訪問SpringSecurityUtils.ifAnyGranted(roles)

我沒有Shiro的經驗,但我想它可以做同樣的事情。