Hi Amy,
On 2011-07-19, at 5:55 AM, Amy Worrall wrote:
> Hi! I have a question about good app design.
>
> I know that, as mentioned in the WOWODC videos I've watched, a common
> beginner mistake is to put most of the logic in the page components.
> Indeed, I've been guilty of that myself in apps I've made in the past.
> I know the fundamentals of MVC from my background in Cocoa.
>
> So suppose I have an app where users have their own profile. Each user
> can edit his own profile, whereas an admin can edit any profile.
>
> Where abouts does the logic go to check if someone is authorised to
> edit a particular profile? Should there be a method on the Session, to
> return a boolean for "can edit this profile"? If that's the case, from
> where is that method called?
Another approach that ERModernLook makes relatively simple is to tie what can
be seen to the NavigationMenu.plist (you can also set this up for non-D2W
pages).
You can show/hide navigation tabs based on user permissions for the logged in
user determined in the session class.
public String navigationRootChoice() {
Person user = (Person) user();
if(user != null ) {
if(user.isAdmin()==true) {
return "adminuser";
}
return "home";
}
return "none";
}
I've made an example available:
http://wiki.objectstyle.org/confluence/display/WO/SimpleBlog
In the example, the auth code is in the Person entity and the session calls a
method (above) to check if the logged in user isAdmin(),
public boolean isAdmin() {
Role aRole =
Role.fetchRole(this.editingContext(),"roleDescription","Admin");
return this.roles().contains(aRole);
}
>
> I know I could do it by having the page component call the
> authorisation method, and return an error page instead if it goes
> wrong. But that seems to tie the logic too much to my view: what if I
> come to add a REST API later? I'd need to duplicate my permissions
> logic, since it wouldn't be using the WOComponent that outputs the
> HTML page. Ditto if I add another page elsewhere that happens to be
> able to make a profile change (say, allowing an inline name change on
> another otherwise unrelated page). Ideally I think the data model
> itself should be able to reject an edit if it's performed without
> permission, but then we get into problems since the data model
> shouldn't know about the session.
>
> Also, I'm considering using Direct To Web (at least to some extent)
> for this project. I've never used it for anything more than an admin
> interface (i.e. one global login, if you're in then you can edit
> everything). If I were using Direct To Web, is the answer to the above
> question the same?
D2W gives you fine grained control (in rules) over specific properties that are
shown on a given page configuration and also give page flow choices in
branchChoices as Ramsey has described in his email.
David
>
> Thanks for your help,
>
> Amy
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list ([email protected])
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com
>
> This email sent to [email protected]
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]