【问题标题】:Mapping permissions from user's role or group从用户的角色或组映射权限
【发布时间】:2015-11-03 08:44:34
【问题描述】:

我在问是否有任何方法可以让用户的权限继承自他分配的角色和组。

当我将权限分配给特定角色并将一个用户分配给该角色时,我无法获得从其角色继承的权限。

 User john = new User("john");
        john.setEmail("john@acme.com");
        john.setFirstName("John");
        john.setLastName("Smith");

        IdentityManager identityManager =  this.partitionManager.createIdentityManager();

        identityManager.add(john);
        identityManager.updateCredential(john, new Password("demo"));

        Role superuser = new Role("superuser");
        identityManager.add(superuser);

         Role superuser = new Role("superuser");
        identityManager.add(superuser);

        // Create group "sales"
        Group sales = new Group("sales");
        identityManager.add(sales);

        RelationshipManager relationshipManager = this.partitionManager.createRelationshipManager();
        PermissionManager permissionManager = partitionManager.createPermissionManager();
        // Make john a member of the "sales" group
        addToGroup(relationshipManager, john, sales);

        // Make mary a manager of the "sales" group
        grantGroupRole(relationshipManager, john, superuser, sales);

        // Grant the "superuser" application role to john
        grantRole(relationshipManager, john, superuser);

       // permissionManager.grantPermission(john, "ticket", "read");
        //permissionManager.grantPermission(sales,"ticket", "read");  
        permissionManager.grantPermission(sales,"ticket", "read");  
        List<Permission> permissionsList=permissionManager.listPermissions(john);
        if (permissionsList==null || permissionsList.isEmpty())
            System.err.println("User John doesn't have a permission list");
        for (Permission per:permissionsList){
            System.out.println("User John permitted: "+per.getOperation()+" on "+per.getResource());
        }

这是输出:

11:38:07,102 ERROR [stderr] (ServerService Thread Pool -- 110) User John doesn't have a permission list

有什么 API 可以解决这个问题吗?

【问题讨论】:

  • 我可能是错的,但我认为listPermissions(resource) 会返回一个具有指定资源权限的受让人列表(在你的例子中是用户“john”),不是该资源对其他资源拥有哪些权限;
  • 感谢@greenSocksRock 的回复,实际上我已经切换回 Apache shiro,但为什么不让我尝试测试一下您的解决方案。
  • 如果您仍在评估不同的安全框架并需要丰富的 API 来检索权限或受保护的对象,请查看开源 OACC framework。刚刚在DZone 上发布了它与其他安全框架的比较说明。 (披露:我是合著者和维护者)
  • 好的,谢谢,我去看看。
  • 您好,我有一个关于 OACC 框架的问题,它是否支持集群部署?

标签: picketlink


【解决方案1】:

Picketlink online reference 说:

“例如,假设我们有一个角色可以读取文件。如果您将此角色授予用户,他们将从被授予的角色继承所有特权/权限。”

但是,如果您直接调用 permissionManager.listPermissions(user),此方法不会为您提供从其角色继承的权限。

你需要调用identity.hasPermission("ticket", "read")才能工作(身份是当前用户的实例,可以通过注入@Inject Identity身份获得;)。在这种情况下,当前用户将根据其角色继承所有权限。

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2019-06-12
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2015-11-26
    • 2018-11-18
    相关资源
    最近更新 更多