serverChannel.permissionsOf() can take a role

This commit is contained in:
abalabahaha
2016-05-31 10:59:05 -07:00
parent e6054c6ace
commit f8bf945f9d
3 changed files with 41 additions and 17 deletions

View File

@@ -40,12 +40,12 @@ Server_ the channel belongs to.
Functions Functions
--------- ---------
permissionsOf(user) permissionsOf(userOrRole)
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
**Aliases:** permsOf **Aliases:** permsOf
Returns a ChannelPermissions_ object of a user's permissions in that channel. Returns a ChannelPermissions_ object of a user or role's permissions in that channel.
mention() mention()
~~~~~~~~~ ~~~~~~~~~

View File

@@ -47,15 +47,15 @@ var ServerChannel = (function (_Channel) {
} }
} }
ServerChannel.prototype.permissionsOf = function permissionsOf(user) { ServerChannel.prototype.permissionsOf = function permissionsOf(userOrRole) {
user = this.client.internal.resolver.resolveUser(user); userOrRole = this.client.internal.resolver.resolveUser(userOrRole);
if (user) { if (userOrRole) {
if (this.server.ownerID === user.id) { if (this.server.ownerID === userOrRole.id) {
return new _ChannelPermissions2["default"](4294967295); return new _ChannelPermissions2["default"](4294967295);
} }
var everyoneRole = this.server.roles.get("id", this.server.id); var everyoneRole = this.server.roles.get("id", this.server.id);
var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []); var userRoles = [everyoneRole].concat(this.server.rolesOf(userOrRole) || []);
var userRolesID = userRoles.filter(function (v) { var userRolesID = userRoles.filter(function (v) {
return !!v; return !!v;
}).map(function (v) { }).map(function (v) {
@@ -65,7 +65,7 @@ var ServerChannel = (function (_Channel) {
memberOverwrites = []; memberOverwrites = [];
this.permissionOverwrites.forEach(function (overwrite) { this.permissionOverwrites.forEach(function (overwrite) {
if (overwrite.type === "member" && overwrite.id === user.id) { if (overwrite.type === "member" && overwrite.id === userOrRole.id) {
memberOverwrites.push(overwrite); memberOverwrites.push(overwrite);
} else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) { } else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) {
roleOverwrites.push(overwrite); roleOverwrites.push(overwrite);
@@ -115,7 +115,19 @@ var ServerChannel = (function (_Channel) {
return new _ChannelPermissions2["default"](permissions); return new _ChannelPermissions2["default"](permissions);
} else { } else {
return null; userOrRole = this.client.internal.resolver.resolveRole(userOrRole);
if (userOrRole) {
var permissions = this.server.roles.get("id", this.server.id).permissions | userOrRole.permissions;
var overwrite = this.permissionOverwrites.get("id", this.server.id);
permissions = permissions & ~overwrite.deny | overwrite.allow;
overwrite = this.permissionOverwrites.get("id", userOrRole.id);
if (overwrite) {
permissions = permissions & ~overwrite.deny | overwrite.allow;
}
return new _ChannelPermissions2["default"](permissions);
} else {
return null;
}
} }
}; };

View File

@@ -21,20 +21,20 @@ export default class ServerChannel extends Channel{
} }
} }
permissionsOf(user){ permissionsOf(userOrRole){
user = this.client.internal.resolver.resolveUser(user); userOrRole = this.client.internal.resolver.resolveUser(userOrRole);
if (user) { if (userOrRole) {
if (this.server.ownerID === user.id) { if (this.server.ownerID === userOrRole.id) {
return new ChannelPermissions(4294967295); return new ChannelPermissions(4294967295);
} }
var everyoneRole = this.server.roles.get("id", this.server.id); var everyoneRole = this.server.roles.get("id", this.server.id);
var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []); var userRoles = [everyoneRole].concat(this.server.rolesOf(userOrRole) || []);
var userRolesID = userRoles.filter((v) => !!v).map((v) => v.id); var userRolesID = userRoles.filter((v) => !!v).map((v) => v.id);
var roleOverwrites = [], memberOverwrites = []; var roleOverwrites = [], memberOverwrites = [];
this.permissionOverwrites.forEach((overwrite) => { this.permissionOverwrites.forEach((overwrite) => {
if (overwrite.type === "member" && overwrite.id === user.id) { if (overwrite.type === "member" && overwrite.id === userOrRole.id) {
memberOverwrites.push(overwrite); memberOverwrites.push(overwrite);
} else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) { } else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) {
roleOverwrites.push(overwrite); roleOverwrites.push(overwrite);
@@ -58,8 +58,20 @@ export default class ServerChannel extends Channel{
return new ChannelPermissions(permissions); return new ChannelPermissions(permissions);
}else{ } else {
return null; userOrRole = this.client.internal.resolver.resolveRole(userOrRole);
if (userOrRole) {
var permissions = this.server.roles.get("id", this.server.id).permissions | userOrRole.permissions;
var overwrite = this.permissionOverwrites.get("id", this.server.id);
permissions = (permissions & ~overwrite.deny) | overwrite.allow;
overwrite = this.permissionOverwrites.get("id", userOrRole.id);
if (overwrite) {
permissions = (permissions & ~overwrite.deny) | overwrite.allow;
}
return new ChannelPermissions(permissions);
} else {
return null;
}
} }
} }