成就和ACL

时间:2014-08-27 12:13:49

标签: parse-platform acl

我在Parse有一个成就课,_User可以在我正在进行的游戏中的某个地方获得成就。出于某种原因,没有获得成就的_用户不应该能够看到有关它的信息。

我知道如何在经典数据库模式中实现它(使用多对多关系),但我想知道如何使用为此类事项设计的权限和ACL在Parse中实现它(I只看到如何使用ACL进行一对一的关系。)

我的想法是将一个Relation列添加到_User类。但是如何确保_User只能获得有关他们获得的成就的信息。

我是否有义务将Cloud Code用于此类问题?

2 个答案:

答案 0 :(得分:1)

你必须创建一个关联表,或者更好的是,在两个表之间建立一个Parse Relation。

https://parse.com/docs/relations_guide#manytomany

在类中添加关系列,如下所示:

enter image description here

如果存在与指定成就的关系,那么用户可以获得他的信息

修改1

通过ACL,您可以做类似的事情(我使用一些Obj-C代码来解释):

// Having the instance to an existing Achievement object
PFObject* achievement = [PFObject objectWithClassName:kTbAchievements];
[achievement setObjectId:@"mwQipJGpSb"];
[achievement fetch]; // gain full object from Parse server

// Way for get current achievement acl informations
//PFACL* currentAchievementACL = [achievement ACL];

// Creation of ACL for this achivement (just for this example ), otherwise use " 
// [achievement ACL]" for getting existing achievement ACL

PFACL* acl = [PFACL ACL]; // Instance of new Acl object

// allowing read access to user with objectId == userId1
[acl setReadAccess:YES forUserId:@"userId1"];

// allowing read access to user with objectId == userId2
[acl setReadAccess:YES forUserId:@"userId2"];

[achievement setACL:acl]; // assign new created ACL obj
[achievement save]; // updating the achievement


// check for user authorizations
BOOL check1 = [acl getReadAccessForUserId:@"userId1"]; // YES, granted
BOOL check2 = [acl getReadAccessForUserId:@"userId2"]; // YES, granted
BOOL check3 = [acl getReadAccessForUserId:@"userId3"]; // NO, denied

这是您在所选成就的仪表板中的内容 enter image description here

希望有所帮助

答案 1 :(得分:0)

您是否担心用户攻击Parse数据库以了解他们没有的成就?如果是这样,那么ACL是一个很好的解决方案。 ACL是为了解决安全问题。

如果您希望他们只看到他们在游戏的UI中拥有的成就,那么我只需使用关系来链接成就。这将是一个过滤问题。

您需要问自己这是安全问题还是过滤问题。