1

アプリケーションに shiro プラグインをインストールしました。ロール 'role_developer' に 1 つの完全なコントローラーを割り当てました。そのため、ユーザーが role_developer の下にある場合、そのコントローラーのすべてのアクションにアクセスできます。しかし、ここでは、そのコントローラーの 2 つのアクションを削除したいと思います。だから私に提案してください..

ここに私のコードは次のとおりです。

def shiroRole = new ShiroRole()
shiroRole.name='ROLE_DEVELOPER'// create role as role developer
shiroROle.addToPermission('Person') //assigned permissions Person controller with all actionss
shiro.save()

今、ROLE_DEVELOPER のユーザーを 1 人作成し、person controller:create,list only のようないくつかのアクションにパーミッションを割り当てます。

def shiroUser = new ShiroUser()
shiroUser.username='username'
shiroUser.passwordHash= new Sha256Hash("password").toHex()
shiroUser.addToRoles(ShiroRole.findByName('ROLE_DEVELOPER')
        newUser.addToPermissions('person:list,create')
                newUser.save()

...したがって、ここで shiroUser は、role_dveloper に割り当てられたすべてのアクションにアクセスするべきではありません

4

2 に答える 2

1

純粋な shiro API を使用してこれを行う方法はわかりませんが、grailsフィルターを使用して行うことができます

このようなもの

import org.apache.shiro.SecurityUtils
import org.apache.shiro.subject.Subject


class ProjectFilters {
    def filters = {
        all(controller: 'Person', action: '*') {
            before = {
                Subject subject = SecurityUtils.getSubject()

                //boolean hasRole = subject.hasRole('ROLE_DEVELOPER')
                //boolean hasPermission = subject.isPermitted('Person')

                if (/*your logic here*/) {
                    redirect(uri: '/access-denied')
                    return false
                }

            }
        }
    }
}
于 2013-08-26T11:19:50.543 に答える
0

フィルターは必要ありません。:-)

使ったことがない

shiroRole.addToPermission('Person')

しかし、あなたの質問から、それは等しいと思います

shiroRole.addToPermission('Person:*')

ロールの所有者に、Person コントローラーのすべてのアクションへのアクセス権を付与します。

この特別なユーザーにアクセス許可を割り当てることにより、ユーザーの 1 人のアクセス許可の一部を削除したいと思われます。しかし、それはそれが機能する方法ではありません。私の知る限り、アクセス許可を削除する方法はありません。より安全なので問題ありません...

Shiro は次のように動作します。

a:bユーザーに controlleraおよび actionへのアクセス権を付与するなどのアクセス許可b。ロールは権限の集合です。権限は付加的です。

したがって、ロールを作成すると

def shiroRole = new ShiroRole()
shiroRole.name='ROLE_USER'// create role as role developer
shiroRole.addToPermission('Person:list,show') //assigned permissions Person controller with all actionss
shiroRole.save()

とユーザー

def shiroUser = new ShiroUser()
shiroUser.username='username'
shiroUser.passwordHash= new Sha256Hash("password").toHex()
shiroUser.addToRoles(ShiroRole.findByName('ROLE_USER')
shiroUser.addToPermissions('person:create,save')
shiroUser.save()

このユーザーは、割り当てられたロールへのアクセス、Person:listおよびそのロールからのアクセス、および直接のアクセス許可からアクセスできます。Person:showPerson:createPerson:save

ご覧のとおり、ほとんどの場合、役割を操作し、直接のアクセス許可を使用しないようにするだけで十分です。

これが役立つことを願っています...

于 2013-08-27T06:54:30.133 に答える