Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Permissions groups with inheritance #5

Open
amkeyte opened this issue Feb 6, 2011 · 0 comments
Open

Permissions groups with inheritance #5

amkeyte opened this issue Feb 6, 2011 · 0 comments

Comments

@amkeyte
Copy link

amkeyte commented Feb 6, 2011

I have a solution that will allow the use of groups as well as players. I have done it this way to improve inheritance of groups.

when using the Permissions plugin:
Using PermissionHandler.inGroup(player, 'Default') will not return true for a player in "Admins" even if Admins is inherited from Default. (please correct me if I'm wrong, but my experience is that it doesn't.)
By adding a generic permission to a group, "group.<group_name>", it is possible to check for that permission with inheritance. Within MyWarp is is possible to invite a permissions group, or to give a warp to a group. However, since playerCanWarp and playerCanModify only check for a player by name, it will not map over and allow the action.

I propose the following changes as a fix. I have tested this on my own server and it seems to work well.

To Warp.java these edits:

public boolean playerCanWarp(Player player) {
    if (creator.equals(player.getName()))
        return true;
    if (permissions.contains(player.getName()))
        return true;
    //amkeyte
    if (WarpPermissions.isGroupMember(player, permissions))
        return true;
    if (WarpPermissions.isAdmin(player) && WarpSettings.adminPrivateWarps)
        return true;

    return publicAll;
}


public boolean playerCanModify(Player player) {
    if (creator.equals(player.getName()))
        return true;
    //amkeyte
    //give the warp to a group to allow them to modify it.
    if (WarpPermissions.isGroupMember(player, creator))
        return true;
    if (WarpPermissions.isAdmin(player))
        return true;
    return false;
}

to WarpPermissions.java add these functions:

/**
 * amkeyte
 *
 * checks if the player is a member of a group using the Permissions plugin.
 *
 * The player must be a member of a group that has been given the permission:
 *              group.<Group Name>
 *
 *  This method of checking for group allows the permissions plugin to assign by inheritance.
 *
 * @param player
 * @param permissions
 * @return
 */
public static boolean isGroupMember(Player player, String groupName) {
    String groupPermission = "group." + groupName;
    if (permission(player, groupPermission)) {
        return true;
    }


    return false;
}
/**
 * amkeyte
 * Overloaded from above.
 * 
 * checks if the player is a member of a group in the list.
 * Iterates each item in the list and checks if the player is in the group.
 * players may invite a group to their warp just like they would a player.
 *
 * called by Warp.playerCanModify
 * 
 * @param player
 * @param permissions
 * @return
 */
public static boolean isGroupMember(Player player, ArrayList<String> permissions) {
    for (Iterator iter = permissions.iterator(); iter.hasNext();) {
        if (isGroupMember(player, (String) iter.next())) {
            return true;
        }
    }

    return false;
}

You might decide to go with a more specific permission property, (mywarp.warp.group.<group_name>) but I like the more generic one, since this technique could be helpful in other plugins as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant